题解 | #牛群保卫战#

牛群保卫战

https://www.nowcoder.com/practice/c836930db162418f87874ac5ba84726b

一、知识点:

数组、循环

二、文字分析:

  1. 初始化窗口的左边界left为0,窗口的右边界right为0,当前窗口的战斗力之和sum为0,最短连续牛群的长度minLen为数组的长度加1。
  2. 使用循环,不断向右移动窗口的右边界right。当sum小于目标战斗力值时,将当前右边界的牛的战斗力值加入sum中。当sum大于等于目标战斗力值时,更新minLen为当前窗口的长度。当sum大于等于目标战斗力值时,将当前左边界的牛的战斗力值从sum中减去,并将左边界右移一位。
  3. 返回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;
    }
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务