LeetCode337周赛T4 -- 同余

1. 题目描述

T4



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;
    }
};
posted @ 2023-03-19 19:21  光風霽月  阅读(9)  评论(0编辑  收藏  举报