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)


