【每日一题Day119】LC1250检查好数组 | 数学

简介: 【每日一题Day119】LC1250检查好数组 | 数学

检查好数组【LC1250】

给你一个正整数数组 nums,你需要从中任选一些子集,然后将子集中每一个数乘以一个 任意整数,并求出他们的和。

假如该和结果为 1,那么原数组就是一个「好数组」,则返回 True;否则请返回 False

image.png

思路:根据「裴蜀定理」,如果数组中元素的最大公约数为1,那么这个数组一定是好数组

class Solution {
    public boolean isGoodArray(int[] nums) {
        int ans = nums[0];
        for (int i = 1; i < nums.length; i++){
            ans = gcd(ans, nums[i]);
            if (ans == 1) return true;
        }
        return ans == 1;
    }
    public int gcd(int x, int y){
        if (y == 0){
            return x;
        }
        return gcd(y, x % y);
    }
}

复杂度分析


时间复杂度:O ( n + l o g m )  假设数组中元素的最大值为m mm

空间复杂度:O ( 1 )

目录
相关文章
|
6月前
【每日一题Day290】LC1281整数的各位积和之差 | 模拟
【每日一题Day290】LC1281整数的各位积和之差 | 模拟
41 0
|
6月前
【每日一题Day268】LC415字符串相加 | 模拟
【每日一题Day268】LC415字符串相加 | 模拟
46 0
|
6月前
【每日一题Day345】LC2562找出数组的串联值 | 模拟
【每日一题Day345】LC2562找出数组的串联值 | 模拟
40 0
|
6月前
【每日一题Day194】LC970强整数 | 枚举
【每日一题Day194】LC970强整数 | 枚举
36 0
|
6月前
|
机器学习/深度学习
【每日一题Day263】LC2544交替数字和 | 数学
【每日一题Day263】LC2544交替数字和 | 数学
48 0
|
6月前
【每日一题Day204】LC1330翻转子数组得到最大的数组值 | 数学
【每日一题Day204】LC1330翻转子数组得到最大的数组值 | 数学
44 1
|
6月前
|
前端开发
【每日一题Day228】LC2460对数组执行操作 | 模拟+双指针
【每日一题Day228】LC2460对数组执行操作 | 模拟+双指针
39 0
|
6月前
【每日一题Day299】LC2235两整数相加
【每日一题Day299】LC2235两整数相加
31 0
|
6月前
【每日一题Day308】LC57插入区间 | 模拟
【每日一题Day308】LC57插入区间 | 模拟
46 0
|
6月前
【每日一题Day152】LC1012至少有1位重复的数字 | 数位dp
【每日一题Day152】LC1012至少有1位重复的数字 | 数位dp
48 0