1. 题目描述
2. 思路
其实本题非常简单。我们只需要知道一个概念:“同余”。
即:\(a == b (mod c)\),我们称 \(a\) 和 \(b\) 相等在 \(mod c\) 意义下。
知道了这个点,那么题目就很好做了。
对于每 \(a\),如果我们想通过 \(b\) 构造出来它,\(b\) 可以任意加减 \(c\),即:\(a = b + k * c,k = 0,1,2,3...\)
如果 \(b\) 中包含 \(c\) 的话,那么可以进一步转化为: \(a = b' + k' * c, k' = 0,1,2,3....\)
不就相当于 \(a == b (mod c)\) 吗。。
那么我们只需要依次遍历 \(a\),判断有没有余数与它同余的 \(b\) 即可
3. 代码
class Solution {
public:
int findSmallestInteger(vector<int>& nums, int value) {
vector<int> cnt(value + 10);
for(auto &x : nums) {
cnt[(x % value + value) % value] ++ ;
}
int res = 0;
while(1) {
if( -- cnt[res % value] < 0) break;
res ++ ;
}
return res;
}
};
标签:cnt,--,res,T4,value,int,LeetCode337,同余
From: https://www.cnblogs.com/ALaterStart/p/17233990.html