import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @param target int整型 * @return int整型 */ public int minSubarray (int[] nums, int target) { if (nums == null || nums.length == 0) { return 0; } LinkedList<Integer> list = new LinkedList<>(); int cur = 0; int ans = Integer.MAX_VALUE; for (int num : nums) { cur += num; list.addLast(num); while (cur >= target) { ans = Math.min(ans, list.size()); cur -= list.pollFirst(); } } return ans == Integer.MAX_VALUE ? 0 : ans; } }
滑动窗口解题:
准备一个队列。先假设答案为Integer.MAX_VALUE,然后遍历数据,计算当前和,然后把当前元素添加到队列尾部:
如果当前和小于target,遍历下一个元素;
如果当前和大于等于target,循环计算目前为止最小的长度,从队列头部弹出元素,当前和减去队列弹出的元素
最终判断,ans 是否为Integer.MAX_VALUE,如果是说明没有答案,返回0,如果不是返回ans