904. Fruit Into Baskets
- 原题链接:
- 完成情况:
- 解题思路:
- 参考代码:
原题链接:
904. Fruit Into Baskets
https://leetcode.cn/problems/fruit-into-baskets/
完成情况:
解题思路:
连续数组 -> 滑动窗口 -> 右边正常移动,左边框定起始边界进行移动.
题目有点傻逼,翻译成英文就能看懂了。
总结就是一句话: 求最长的只包含两种类型的连续子数组的最大长度
数组里面的0,1,2,3,4,5
表示的是,它是第ABCDE种水果
然后最多只能有两种水果。
参考代码:
package 日常Java程序测试.代码随想录.数组;
import java.util.HashMap;
import java.util.Map;
public class __904FruitIntoBaskets {
/**
* 求最长的只包含两种类型的连续子数组的最大长度
* @param fruits
* @return
*/
public int totalFruit(int[] fruits) { //连续数组 -> 滑动窗口 -> 右边正常移动,左边框定起始边界进行移动.
int n = fruits.length;
Map<Integer,Integer> cnt = new HashMap<Integer,Integer>();
int left = 0,res = 0;
for (int right = 0;right < n;++right){
cnt.put(fruits[right],cnt.getOrDefault(fruits[right],0) + 1);
while (cnt.size() > 2){
cnt.put(fruits[left],cnt.get(fruits[left]) - 1);
if (cnt.get(fruits[left]) == 0){
cnt.remove(fruits[left]);
}
++left;
}
res = Math.max(res,right - left + 1);
}
return res;
}
}