1. 题目描述
2. 思路
其实本题非常简单。我们只需要知道一个概念:“同余”。
即:
a
=
=
b
(
m
o
d
c
)
a == b (mod c)
a==b(modc),我们称
a
a
a 和
b
b
b 相等在
m
o
d
c
mod c
modc 意义下。
知道了这个点,那么题目就很好做了。
对于每
a
a
a,如果我们想通过
b
b
b 构造出来它,
b
b
b 可以任意加减
c
c
c,即:
a
=
b
+
k
∗
c
,
k
=
0
,
1
,
2
,
3...
a = b + k * c,k = 0,1,2,3...
a=b+k∗c,k=0,1,2,3...
如果
b
b
b 中包含
c
c
c 的话,那么可以进一步转化为:
a
=
b
′
+
k
′
∗
c
,
k
′
=
0
,
1
,
2
,
3....
a = b' + k' * c, k' = 0,1,2,3....
a=b′+k′∗c,k′=0,1,2,3....
不就相当于
a
=
=
b
(
m
o
d
c
)
a == b (mod c)
a==b(modc) 吗。。
那么我们只需要依次遍历
a
a
a,判断有没有余数与它同余的
b
b
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;
}
};