904. 水果成篮
904. 水果成篮
- 原题链接:
- 完成情况:
- 解题思路:
- 参考代码:
- _904水果成篮_滑动窗口
- 错误经验吸取
原题链接:
904. 水果成篮
https://leetcode.cn/problems/fruit-into-baskets/description/
完成情况:
解题思路:
该函数的目的是计算在给定整数数组fruits中进行一次连续的采摘过程中可以采摘的水果总数。在这个函数中,先定义整数n为数组fruits的长度,然后使用Map类型的count来记录每种水果的数量。接着定义左指针left和结果result,并对结果进行初始化为0。在具体实现中,通过循环遍历数组fruits,不断更新count中不同水果的数量,并根据条件来更新左指针和结果result,最终返回结果result。
参考代码:
_904水果成篮_滑动窗口
package leetcode板块;import java.util.HashMap;
import java.util.Map;public class _904水果成篮_滑动窗口 {/*** 找连续最长绝对值不超过2的子数组长度* @param fruits* @return*/public int totalFruit(int[] fruits) {// TODO 进行一次连续的采摘,即连续字符串/*1 <= fruits.length <= 10^50 <= fruits[i] < fruits.length*/int n = fruits.length;Map<Integer, Integer> count = new HashMap<Integer, Integer>();int left = 0,result = 0;for (int right = 0; right < n;++right){ //从右往左去逼近count.put(fruits[right],count.getOrDefault(fruits[right],0)+1); //右边类别统计计数//左边开始指针移动while (count.size() > 2){ //只需要保证是两类水果就行,size <= 2 即可。count.put(fruits[left],count.get(fruits[left]) - 1);if (count.get(fruits[left]) == 0){count.remove(fruits[left]);}++left;}result = Math.max(result,right - left + 1);}return result;}
}