课程学习–算法总结:数组专题(第3期)–滑动窗口
public int totalFruit(int[] fruits) {
int left = 0;
int right = 0;
Counter counter = new Counter();
int res = Integer.MIN_VALUE;
for (; right < fruits.length; right++) {
// 滑动右窗
counter.add(fruits[right], 1);
// 滑动左窗
while (counter.size() >= 3) {
counter.add(fruits[left], -1);
if (counter.get(fruits[left]) == 0){
counter.remove(fruits[left]);
}
left++;
}
res = Math.max(res, right - left + 1);
}
return res == Integer.MAX_VALUE ? 0 : res;
}
class Counter extends HashMap<Integer, Integer> {
public int get(int k) {
return containsKey(k) ? super.get(k) : 0;
}
public void add(int k, int v) {
put(k, get(k) + v);
}
}