首页 > 其他分享 >leetcode - 1250 检查好数组

leetcode - 1250 检查好数组

时间:2023-02-15 11:35:30浏览次数:43  
标签:1250 int big 最大公约数 数组 small leetcode gcd

检查好数组

题目

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

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

示例

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

题解

计算最大公约数

最大公约数 (GCD greatest common divisor); 可以使用欧几里得算法(又称辗转相除法):
假如需要求 1997 和 615 两个正整数的最大公约数,用欧几里德算法,是这样进行的:

1997 ÷ 615 = 3 (余 152)
615 ÷ 152 = 4(余7)
152 ÷ 7 = 21(余5)
7 ÷ 5 = 1 (余2)
5 ÷ 2 = 2 (余1)
2 ÷ 1 = 2 (余0)

至此,最大公约数为1

以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数

public int gcd(int a, int b) {
        int big = a > b ? a : b;
        int small = a > b ? b : a;
        int gcd = small;
        while (big % small != 0) {
            gcd = big % small;
            big = small;
            small = gcd;
        }
        return gcd;
    }

求证 GCD(A,B)=GCD(B,R), 其中 R = A%B :
不妨设A > B, A = kB + R
假设D是A,B的一个公约数,R = A - kB 两边同时除以D, 则R/D = A/D - KB/D 也为整数,故D也是R的约数;
假设P是B, R的公约数,A = kB + R 两边同时除以P, 则A/P = kB/P + R/P 也是整数,故P也是A的约数;
因此, (A,B)和(B,R)的公约数是一样的,那么他们的最大公约数也必然相等。

裴蜀定理

裴蜀定理

所以该题等价为 判断该数组的最大公约数是否为1

标签:1250,int,big,最大公约数,数组,small,leetcode,gcd
From: https://www.cnblogs.com/rachel-aoao/p/leetcode_1250_check-if-it-is-a-good-array.html

相关文章

  • java 文件File与byte[]数组相互转换的两种方式
     1.文件转byte[]方式一:文件输入流Filefile=newFile("C:\\Users\\Marydon\\Desktop\\个人信用报告.pdf");try{FileInputStreamfis=newFileInputStream(file);......
  • 【LeetCode队列#03】删除字符串中所有的相邻重复项
    删除字符串中所有的相邻重复项力扣题目链接(opensnewwindow)给出由小写字母组成的字符串S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在S上反复执行重......
  • 一维数组的冒泡排序
    1#include<stdio.h>2intmain(intargc,constchar*argv[])3{4inti,j,t,count;5inta[]={1,85,45,12,14,12,14,78,45,69};6intn=siz......
  • NumPy数组如何保存到文件中以进行机器学习?
    对于资深编程人员来说,在机器学习模型中常婵需要使用到NumPy数组,NumPy数组主要是处理Python中数据有效的数据结构,机器学习模型(scikit-learn)和深度学习模型(Keras)都希望使用Nu......
  • leetcode - 1124 表现良好的最长时间段
    1124.表现良好的最长时间段题目给你一份工作时间表hours,上面记录着某一位员工每天的工作小时数。我们认为当员工一天中的工作小时数大于8小时的时候,那么这一天就是......
  • 【LeetCode队列#02】有效括号
    有效括号力扣题目链接(opensnewwindow)给定一个只包括'(',')','{','}','[',']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左......
  • 数组flat方法实现
    /***实现数组flat方法*可通过递归方式进行将数组拍平,实现flat,默认depth为1*/functionflat(array,depth=1){constresult=[];for(consti......
  • [LeetCode] 2477. Minimum Fuel Cost to Report to the Capital
    Thereisatree(i.e.,aconnected,undirectedgraphwithnocycles)structurecountrynetworkconsistingof n citiesnumberedfrom 0 to n-1 andexactl......
  • 删除数组中重复出现的元素
    Leetcode链接:26.删除有序数组中的重复项-力扣(LeetCode)难易程度:简单1publicintremoveDuplicates(int[]nums){2if(nums==null||nums.length<=1)......
  • [LeetCode] 1138. Alphabet Board Path
    Onanalphabetboard,westartatposition (0,0),correspondingtocharacter board[0][0].Here, board=["abcde","fghij","klmno","pqrst","uvwxy","z"],......