思路:滑动窗口,map用来记录每种水果第一次出现的位置
// @Title: 水果成篮 (Fruit Into Baskets)
// @Author: qisiii
// @Date: 2024-09-11 18:03:12
// @Runtime: 30 ms
// @Memory: 53.7 MB
// @comment: 滑动窗口,map用来记录每种水果第一次出现的位置
// @flag: WHITE
class Solution {
public int totalFruit(int[] fruits) {
if(fruits.length<=2){
return fruits.length;
}
int len=0;
int start=0,end=0,n=fruits.length-1;
HashMap<Integer,Integer> kindMap=new HashMap<>();
while(end<=n){
if(!kindMap.containsKey(fruits[end])||
(kindMap.size()==2&&fruits[end]!=fruits[end-1])
){
kindMap.put(fruits[end],end);
}
//当篮子满了的时候
if(kindMap.size()>2){
len=Math.max(len,end-start);
start=kindMap.get(fruits[end-1]);
kindMap.clear();
kindMap.put(fruits[end],end);
kindMap.put(fruits[end-1],start);
}
len=Math.max(len,end-start+1);
end++;
}
return len;
}
}
思路:滑动窗口:map用来记录每一位出现的次数
// @Title: 水果成篮 (Fruit Into Baskets)
// @Author: qisiii
// @Date: 2024-09-11 18:13:37
// @Runtime: 51 ms
// @Memory: 53.8 MB
// @comment: 滑动窗口:map用来记录每一位出现的次数
// @flag: WHITE
class Solution {
public int totalFruit(int[] fruits) {
int left = 0, right = 0,len=0;
HashMap<Integer, Integer> map = new HashMap<>();
while (right < fruits.length) {
map.put(fruits[right], map.getOrDefault(fruits[right], 0) + 1);
while (map.size() > 2) {
map.put(fruits[left], map.getOrDefault(fruits[left], 0) - 1);
if (map.get(fruits[left]) == 0) {
map.remove(fruits[left]);
}
left++;
}
len=Math.max(len,right-left+1);
right++;
}
return len;
}
}