0
点赞
收藏
分享

微信扫一扫

[leetcode每日一题]2.15

​​1250. 检查「好数组」​​

难度困难92

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

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

 

示例 1:

输入:nums = [12,5,7,23]
输出:true
解释:挑选数字 5 和 7。
5*3 + 7*(-2) = 1

示例 2:

输入:nums = [29,6,10]
输出:true
解释:挑选数字 29, 6 和 10。
29*1 + 6*(-3) + 10*(-1) = 1

示例 3:

输入:nums = [3,6]
输出:false

提示:

  • ​1 <= nums.length <= 10^5​
  • ​1 <= nums[i] <= 10^9​

Solution

本题涉及到裴蜀定理:

若a,b是整数,且​​gcd​​(a,b)=d,那么对于任意的整数x,y,ax+by都一定是d的倍数,特别地,一定存在整数x,y,使ax+by=d成立。

它的一个重要推论是:a,b​​互质​​的​​充分必要条件​​是存在整数x,y使ax+by=1.

class Solution:
def isGoodArray(self, nums: List[int]) -> bool:
g = nums[0]
for x, y in pairwise(nums):
g = gcd(g, y)
return g == 1

学习一个更强大的API:reduce

[leetcode每日一题]2.15_裴蜀定理

那么代码可以更加简洁:

class Solution:
def isGoodArray(self, nums: List[int]) -> bool:
return reduce(gcd, nums) == 1

作者:LeetCode-Solution
链接:https://leetcode.cn/problems/check-if-it-is-a-good-array/solution/jian-cha-hao-shu-zu-by-leetcode-solution-qg2h/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

举报

相关推荐

0 条评论