题目描述

给你一个正整数数组 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

题解

这题名义上是困难难度,实际上只要知道一些数学知识,就非常的简单。

首先题目中要求挑选出一些数,然后给每个数分配整数系数,加权求和等于 1 。 仔细想一想就不对劲,全选不是一样嘛?有些数系数分配 0 就行了。

假设系数分别是 ,那么问题就变成了求解下面的多元一次方程有整数解的条件:

如果你数学基础不错的话,一眼就会发现条件就是所有非零数的最大公约数为 1

证明参见 n 个数的裴蜀定理[1]

代码

        class Solution {public:bool isGoodArray(vector<int>& nums) {int x = nums[0], n = nums.size();for (int i = 1; i < n; ++i) {if (nums[i]) x = gcd(x, nums[i]);}return x == 1;}int gcd(int x, int y) {return x%y ? gcd(y, x%y) : y;}
};

后记

最后不管是用时还是空间消耗都超越了100%的用户。

参考资料

[1]

维基百科:裴蜀定理: https://en.wikipedia.org/wiki/B%C3%A9zout%27s_identity,

每日算法系列【LeetCode 1250】检查「好数组」相关推荐

  1. LeetCode 1250. 检查「好数组」(set / 最大公约数)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个正整数数组 nums,你需要从中任选一些子集,然后将子集中每一个数乘以一个 任意整数,并求出他们的和. 假如该和结果为 1,那么原数组就是一个「好 ...

  2. 重复次数最多的 子串_每日算法系列【LeetCode 424】替换后的最长重复字符

    题目描述 给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次.在执行上述操作后,找到包含重复字母的最长子串的长度. 示例1 输入: s = &quo ...

  3. 为什么 LeetCode(力扣)「执行代码」正确,提交代码出错?

    为什么有时在 LeetCode (力扣)上,Run Code(执行代码) 正确,Submit(提交代码)时提示 Wrong Answer(解答错误)? 看这篇文章你就懂了,真不是 LeetCode 出 ...

  4. freemarker 数组转字符串_TypeScript 实战算法系列(一):实现数组栈与对象栈

    本文由图雀社区认证作者 神奇的程序员 写作而成,图雀社区将连载其TypeScript 实战算法系列,点击阅读原文查看作者的掘金链接,感谢作者的优质输出,让我们的技术世界变得更加美好? 前言 栈作为一种 ...

  5. 机器人大牛 Daniela Rus 领衔!MIT 新算法实现软体机器人「本体感知」

    本文转自雷锋网,如需转载请至雷锋网官网申请授权. 说起软体机器人,或许很多人都不觉得陌生了. 软体机器人的发展离不开包括材料学.机器人学.生物力学.传感与控制在内的多学科进步,近年来相关学科迅速发展, ...

  6. 求栈中元素个数算法_每日算法系列【LeetCode 315】计算右侧小于当前元素的个数...

    题目描述 给定一个整数数组 nums ,按要求返回一个新数组 counts .数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量. 示例 ...

  7. 数组最大可以开多大_每日算法系列【LeetCode 689】三个无重叠子数组的最大和

    题目描述 给定数组 由正整数组成,找到三个互不重叠的子数组的最大和. 每个子数组的长度为 ,我们要使这 个项的和最大化. 返回每个区间起始索引的列表(索引从 0 开始).如果有多个结果,返回字典序最小 ...

  8. 如何表示数组所有数都不等于一个数_每日算法系列【LeetCode 523】连续的子数组和...

    题目描述 给定一个包含非负数的数组和一个目标整数 k,编写一个函数来判断该数组是否含有连续的子数组,其大小至少为 2,总和为 k 的倍数,即总和为 n*k,其中 n 也是一个整数. 示例1 输入: [ ...

  9. 如何表示数组所有数都不等于一个数_每日算法系列【LeetCode 330】按要求补齐数组...

    题目描述 给定一个已排序的正整数数组 nums ,和一个正整数 n .从 [1, n] 区间内选取任意个数字补充到 nums 中,使得 [1, n] 区间内的任何数字都可以用 nums 中某几个数字的 ...

  10. 序列复杂度怎么看_每日算法系列【LeetCode 376】摆动序列

    题目描述 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列.第一个差(如果存在的话)可能是正数或负数.少于两个元素的序列也是摆动序列. 例如, [1,7,4,9,2,5] 是一个 ...

最新文章

  1. 2020考研 管理类联考数学 【题型分析及解题思路】
  2. 机器学习框架_一个框架解决几乎所有机器学习问题
  3. 生成随机数放入整型数组怎么判断有没有重复_图的应用(1)-连通图的最小生成树(Prim算法和Kruskal算法)...
  4. python文件操作2:在指定目录下查找指定后缀名的文件
  5. sqlserver 删除字段_SQL Server 执行计划缓存
  6. sql去除重复语句(转)
  7. android点击textview后选择,android - 单击后,ClickableSpan TextView保持选中状态 - SO中文参考 - www.soinside.com...
  8. 年轻人也太禁不起诱惑了吧?
  9. c++的assert函数
  10. (20)Linux_C_进程通信(IPC)函数
  11. flash声音播放-Sound
  12. 【GAMES101】三维旋转矩阵中绕三个轴旋转的矩阵公式
  13. 深入浅出WPF(1)——什么是WPF
  14. google四件套之Dagger2。从入门到爱不释手,之:Dagger2进阶知识及在Android中使用
  15. PHP支付接口对接curl Post方式提交详解
  16. Ubuntu硬盘分区和挂载
  17. 《进击的虫师》爬取豆瓣电影海报Top250(2020年10月23日更新)
  18. ubuntu 如何放大终端窗口字体
  19. 利用局域网将电脑上的文件快速下载到手机上
  20. Vivado与Matlab版本匹配表

热门文章

  1. 版本控制工具的必要性、作用、分类和发展历程
  2. 【二叉树遍历迭代伪代码】前序遍历、中序遍历、后序遍历
  3. tensorflow搭建神经网络
  4. 20175323 团队项目 服务器端函数功能与业务逻辑详解
  5. zTree树形控件讲解
  6. 通过WinForm控件创建的WPF控件无法输入的问题
  7. js基础之动画(一)
  8. 第四章表单与文件-笔记-验证
  9. base64编码在silverlight中的使用
  10. WinAPI: LoadBitmap - 从资源中载入位图