小静有n个彩色弹珠,每个弹珠都有一种颜色,你可以挑选一个区间[l,r]的弹珠带走,不过,如果该区间内某一种颜色
的弹珠的个数超过m个,则该颜色的所有弹珠会被小静要回去,即只能带走在区间中个数不超过m个的那些颜色的弹
珠。
请问,如何能选出一个区间,使得你可以带走最多的弹珠?
我写了一个代码,但是WA了2个点,一个是8725写成了8550
请帮我修改,谢谢
#include <iostream>
#include <unordered_map>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
unordered_map<int, int> count; // 用来统计每种颜色的弹珠个数
int colors[n];
for (int i = 0; i < n; i++) {
cin >> colors[i];
count[colors[i]]++;
}
int result = 0;
int left = 0, right = 0; // 滑动窗口的左右指针
unordered_map<int, int> window; // 用来统计滑动窗口内每种颜色的弹珠个数
while (right < n) {
window[colors[right]]++;
// 当窗口内某种颜色的弹珠个数超过m个时,缩小窗口
while (window[colors[right]] > m) {
window[colors[left]]--;
left++;
}
// 更新结果,取最大值
result = max(result, right - left + 1);
right++;
}
cout << result << endl;
return 0;
}