LeetCode337周赛T4 -- 同余

1. 题目描述

T4



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+kck=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+kc,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;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值