题解 | #牛群保卫战#

牛群保卫战

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

知识点

双指针

解题思路

首先,我们定义两个指针start和end,分别表示滑动窗口的起始位置和结束位置。我们将start和end都初始化为0,并且将当前窗口的和初始化为0。

然后我们开始遍历数组。对于每一个牛,我们将其加入当前窗口之和,并且将end指针向右移动一位。

如果当前窗口之和大于等于目标战斗力值,我们更新满足条件的最短连续牛群的长度,并尝试将start指针向右移动一位,寻找更短的满足条件的连续牛群。然后继续遍历下一个牛。

如果当前窗口之和小于目标值,我们继续将end指针向右移动一位,扩大窗口。

当遍历完所有的牛后,我们可以得到满足条件的最短连续牛群的长度。如果不存在这样的连续牛群,返回0。

Java题解

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param target int整型
     * @param nums int整型一维数组
     * @return int整型
     */
    public int findMinSubarrayLength (int target, int[] nums) {
        // write code here
        int start = 0;
        int end = 0;
        int sum = 0;
        int ans = Integer.MAX_VALUE;  // 满足条件的最短连续牛群的长度

        while (end < nums.length) {
            // 将当前牛的战斗力值加入当前窗口的战斗力之和
            sum += nums[end];
            // 判断当前窗口是否满足条件
            while (sum >= target) {
                // 更新满足条件的最短连续牛群的长度
                ans = Math.min(ans, end - start + 1);
                // 将start指针向右移动一位,寻找更短的满足条件的连续牛群
                sum -= nums[start];
                start++;
            }
            // 将end指针向右移动一位,扩大窗口
            end++;
        }
        // 如果不存在满足条件的连续牛群,返回0
        if (ans == Integer.MAX_VALUE) {
            return 0;
        }
        return ans;
    }
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 14:08
点赞 评论 收藏
分享
07-07 11:33
江南大学 Java
已经在暑假实习了&nbsp;,没有明确说有hc,纠结实习到八月份会不会有点影响秋招毕竟感觉今年好多提前批
程序员小白条:92的话准备提前批,其他没必要,没面试机会的,而且你要准备充分,尤其八股和算法题
点赞 评论 收藏
分享
05-27 14:57
西北大学 golang
强大的社畜在走神:27届真不用急,可以搞点项目、竞赛再沉淀沉淀,我大二的时候还在天天打游戏呢
投递华为等公司10个岗位
点赞 评论 收藏
分享
06-10 21:15
门头沟学院 Java
宁阿:好多这种没🧠的公司,他们估计都不知道毕业的人不能给安排实习岗
实习吐槽大会
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务