一、知识点:
数组、循环
二、文字分析:
- 初始化窗口的左边界left为0,窗口的右边界right为0,当前窗口的战斗力之和sum为0,最短连续牛群的长度minLen为数组的长度加1。
- 使用循环,不断向右移动窗口的右边界right。当sum小于目标战斗力值时,将当前右边界的牛的战斗力值加入sum中。当sum大于等于目标战斗力值时,更新minLen为当前窗口的长度。当sum大于等于目标战斗力值时,将当前左边界的牛的战斗力值从sum中减去,并将左边界右移一位。
- 返回minLen,如果minLen仍然是初始值(数组的长度加1),表示不存在满足条件的连续牛群,返回0。
时间复杂度为O(n),其中n是数组的长度。空间复杂度为O(1)。
三、编程语言:
java
四、正确代码:
import java.util.*; public class Solution { public int findMinSubarrayLength(int target, int[] nums) { int left = 0; int right = 0; int sum = 0; int minLen = nums.length + 1; while (right < nums.length) { sum += nums[right]; while (sum >= target) { minLen = Math.min(minLen, right - left + 1); sum -= nums[left]; left++; } right++; } return minLen == nums.length + 1 ? 0 : minLen; } }