2831. 找出最长等值子数组
C代码:
int longestEqualSubarray(int* nums, int numsSize, int k){
int* a = calloc(numsSize + 1, sizeof(int));
int ans = 0, cnt = 0;
int l = 0;
for (int r = 0; r < numsSize; r++) {
a[nums[r]]++; // 滑动窗口中的字符次数
if (ans < a[nums[r]]) { // 次数大的作为ans,且不涉及k
ans = a[nums[r]];
} else { // 次数小的记录一次
++cnt;
}
if (cnt > k) { // 滑窗的最大长度为k,只需记录在窗口滑动过程中,内部a[nums[r]]的最大值
a[nums[l]]--;
l++;
--cnt;
}
}
return ans;
}