每日算法系列【LeetCode 1250】检查「好数组」
题目描述
给你一个正整数数组 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】检查「好数组」相关推荐
- LeetCode 1250. 检查「好数组」(set / 最大公约数)
文章目录 1. 题目 2. 解题 1. 题目 给你一个正整数数组 nums,你需要从中任选一些子集,然后将子集中每一个数乘以一个 任意整数,并求出他们的和. 假如该和结果为 1,那么原数组就是一个「好 ...
- 重复次数最多的 子串_每日算法系列【LeetCode 424】替换后的最长重复字符
题目描述 给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次.在执行上述操作后,找到包含重复字母的最长子串的长度. 示例1 输入: s = &quo ...
- 为什么 LeetCode(力扣)「执行代码」正确,提交代码出错?
为什么有时在 LeetCode (力扣)上,Run Code(执行代码) 正确,Submit(提交代码)时提示 Wrong Answer(解答错误)? 看这篇文章你就懂了,真不是 LeetCode 出 ...
- freemarker 数组转字符串_TypeScript 实战算法系列(一):实现数组栈与对象栈
本文由图雀社区认证作者 神奇的程序员 写作而成,图雀社区将连载其TypeScript 实战算法系列,点击阅读原文查看作者的掘金链接,感谢作者的优质输出,让我们的技术世界变得更加美好? 前言 栈作为一种 ...
- 机器人大牛 Daniela Rus 领衔!MIT 新算法实现软体机器人「本体感知」
本文转自雷锋网,如需转载请至雷锋网官网申请授权. 说起软体机器人,或许很多人都不觉得陌生了. 软体机器人的发展离不开包括材料学.机器人学.生物力学.传感与控制在内的多学科进步,近年来相关学科迅速发展, ...
- 求栈中元素个数算法_每日算法系列【LeetCode 315】计算右侧小于当前元素的个数...
题目描述 给定一个整数数组 nums ,按要求返回一个新数组 counts .数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量. 示例 ...
- 数组最大可以开多大_每日算法系列【LeetCode 689】三个无重叠子数组的最大和
题目描述 给定数组 由正整数组成,找到三个互不重叠的子数组的最大和. 每个子数组的长度为 ,我们要使这 个项的和最大化. 返回每个区间起始索引的列表(索引从 0 开始).如果有多个结果,返回字典序最小 ...
- 如何表示数组所有数都不等于一个数_每日算法系列【LeetCode 523】连续的子数组和...
题目描述 给定一个包含非负数的数组和一个目标整数 k,编写一个函数来判断该数组是否含有连续的子数组,其大小至少为 2,总和为 k 的倍数,即总和为 n*k,其中 n 也是一个整数. 示例1 输入: [ ...
- 如何表示数组所有数都不等于一个数_每日算法系列【LeetCode 330】按要求补齐数组...
题目描述 给定一个已排序的正整数数组 nums ,和一个正整数 n .从 [1, n] 区间内选取任意个数字补充到 nums 中,使得 [1, n] 区间内的任何数字都可以用 nums 中某几个数字的 ...
- 序列复杂度怎么看_每日算法系列【LeetCode 376】摆动序列
题目描述 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列.第一个差(如果存在的话)可能是正数或负数.少于两个元素的序列也是摆动序列. 例如, [1,7,4,9,2,5] 是一个 ...
最新文章
- 2020考研 管理类联考数学 【题型分析及解题思路】
- 机器学习框架_一个框架解决几乎所有机器学习问题
- 生成随机数放入整型数组怎么判断有没有重复_图的应用(1)-连通图的最小生成树(Prim算法和Kruskal算法)...
- python文件操作2:在指定目录下查找指定后缀名的文件
- sqlserver 删除字段_SQL Server 执行计划缓存
- sql去除重复语句(转)
- android点击textview后选择,android - 单击后,ClickableSpan TextView保持选中状态 - SO中文参考 - www.soinside.com...
- 年轻人也太禁不起诱惑了吧?
- c++的assert函数
- (20)Linux_C_进程通信(IPC)函数
- flash声音播放-Sound
- 【GAMES101】三维旋转矩阵中绕三个轴旋转的矩阵公式
- 深入浅出WPF(1)——什么是WPF
- google四件套之Dagger2。从入门到爱不释手,之:Dagger2进阶知识及在Android中使用
- PHP支付接口对接curl Post方式提交详解
- Ubuntu硬盘分区和挂载
- 《进击的虫师》爬取豆瓣电影海报Top250(2020年10月23日更新)
- ubuntu 如何放大终端窗口字体
- 利用局域网将电脑上的文件快速下载到手机上
- Vivado与Matlab版本匹配表