题解 | #牛群保卫战#

牛群保卫战

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;
    }
}

全部评论

相关推荐

01-02 00:50
三峡大学 Java
程序员牛肉:这简历一出手就离失业不远了。 作为一家公司来讲,我如果要招日常实习生,那我对实习生最基本的要求就是要能干活,毕竟你就待三四个月,谁会留心培养你? 那么除了院校之外,最重要的就是项目和实习了。没有实习的话项目就好好搞。 但是你说你这个项目吧:课程作业管理系统和TMS运输管理系统。这两个基本就和闹着玩差不多。 你作为一个想要应聘Java开发实习生的人,对后端的理解还仅仅停留在:“使用mapper和sql映射”,“使用SQL进行多表调用”,“基于MySQL简历表结构”,“基于Spring boot完成CURD操作”这种玩具上......... 找不到后端实习的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务