【每日一题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 )

目录
相关文章
|
2月前
【每日一题Day127】LC1238循环码排列 | 格雷码构造 位运算
【每日一题Day127】LC1238循环码排列 | 格雷码构造 位运算
34 0
【每日一题Day127】LC1238循环码排列 | 格雷码构造 位运算
|
2月前
【每日一题Day290】LC1281整数的各位积和之差 | 模拟
【每日一题Day290】LC1281整数的各位积和之差 | 模拟
19 0
|
2月前
【每日一题Day268】LC415字符串相加 | 模拟
【每日一题Day268】LC415字符串相加 | 模拟
31 0
|
2月前
【每日一题Day345】LC2562找出数组的串联值 | 模拟
【每日一题Day345】LC2562找出数组的串联值 | 模拟
24 0
|
2月前
【每日一题Day194】LC970强整数 | 枚举
【每日一题Day194】LC970强整数 | 枚举
26 0
|
2月前
|
存储
【每日一题Day253】LC2两数相加 | 链表模拟
【每日一题Day253】LC2两数相加 | 链表模拟
18 0
|
2月前
【每日一题Day301】LC2337移动片段得到字符串 | 双指针 计分
【每日一题Day301】LC2337移动片段得到字符串 | 双指针 计分
32 0
|
2月前
|
机器学习/深度学习
【每日一题Day263】LC2544交替数字和 | 数学
【每日一题Day263】LC2544交替数字和 | 数学
33 0
|
2月前
【每日一题Day204】LC1330翻转子数组得到最大的数组值 | 数学
【每日一题Day204】LC1330翻转子数组得到最大的数组值 | 数学
28 1
|
2月前
|
前端开发
【每日一题Day228】LC2460对数组执行操作 | 模拟+双指针
【每日一题Day228】LC2460对数组执行操作 | 模拟+双指针
24 0