水果成篮 (Fruit Into Baskets)

 

思路:滑动窗口,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;
    }
}
Licensed under CC BY-NC-SA 4.0
最后更新于 2024-10-18