分享|第 193 场力扣夜喵双周赛

67
2026.10.29
2026.10.29
发布于 重庆
4076. 最长有韧性的子数组 II
4076. 最长有韧性的子数组 II
C++
class Solution {
public:
    int resilientSubarray(vector<int>& nums, int k) {
        //1. 同余:
        //(s-x)mod k == 0
        // s mod k == x mod k
        //所以,子数组的每个数模 k 后都相等

        //2. 已经确定子数组长度,要满足有韧性
        //设子数组的长度为 cnt。去掉一个数后,子数组的和模 k 必须为 0,
        //则: ((x mod k)⋅(cnt−1)) mod k = 0
        //最后都要mod k,所以可以提前(x mod k)
    
        int n = nums.size();
        int cnt = 0;
        int ans = 0;
        for(int i=0;i<n;i++){
            int r = nums[i] % k;
            if(i>0 and r == nums[i-1] % k){
                cnt++;
                
            }else{
               
                cnt = 1;
            }
             if((r * (cnt - 1)) % k == 0) ans = max(ans , cnt);
        }
        return ans;
    }
};
评论 (0)