一、知识点:
数组、循环
二、文字分析:
- 初始化窗口的左边界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;
}
}

京公网安备 11010502036488号