相关标签
一、题目要求
二、题解和代码实现
1.题解
2.代码实现
代码如下(示例):
class Solution {
public int totalFruit(int[] fruits) {
if(fruits.length==0){
return 0;
}
HashMap<Integer, Integer> map = new HashMap<>();//用于记录同种树摘了多少课,最大个数限制在两个
int max = 0;
int left = 0;//滑动窗口开始位置
for (int right = 0; right < fruits.length; right++) {
map.put(fruits[right],map.getOrDefault(fruits[right],0)+1);//记录摘到第几颗树
while (map.size()>2){
if (map.get(fruits[left])==1){//需要移除滑动窗口起始的数据,保持map长度为2
map.remove(fruits[left]);
}else {//有多个时,每次减少一个
map.put(fruits[left],map.get(fruits[left])-1);
}
left++;//滑动窗口移动
}
max= Math.max(max,(right-left)+1);//记录最多摘了几棵树,right-left+1,记录滑动窗口到了几颗树
}
return max;
}
}