题解 | #牛群保卫战#

牛群保卫战

https://www.nowcoder.com/practice/c836930db162418f87874ac5ba84726b?tpId=354&tqId=10588485&ru=/exam/oj/ta&qru=/ta/interview-202-top/question-ranking&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D354

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param target int整型 
     * @param nums int整型一维数组 
     * @return int整型
     */
        public int findMinSubarrayLength (int target, int[] nums) {
		  // fast快指针每次必+1遍历全部nums数组
        int fast = 0;
		  // 慢指针slow用于在sum>target的情况下进行缩减,缩容
        int slow = 0;
		  // sum用于子数组求和是否大于target
        int sum = 0;
		  // pos用于记录连续牛群的长度,这里赋值给nums.length+1相当于一个Integer.MAXValue,赋值一个较大值
		  // 而pos最多是什么呢?比如nums.length也就是整个数组的长度刚好满足sum>target的条件
		  // 利用nums.length+1可以判断pos是否被赋值过,可以看结尾的return 会更好理解 ,如果<nums.length+1说明被赋值过,有更小的连续牛群长度,返回pos,否则返回0表示找不到连续牛群>target的长度
        int pos = nums.length + 1;
		  // fast用于遍历求和
        for (; fast < nums.length; fast++) {
		  // 每次必+nums[fast]
            sum += nums[fast];
		  // 什么时候进行缩容?当然是sum>=target的时候
            if (sum >= target) {
			  // 用while(true)进行持续的缩容
                while (true) {
				  // 判断缩容后是否大于target 如果还大于那么减取nums[slow]然后继续缩容
                    if (sum - nums[slow] >= target) {
                        sum = sum - nums[slow];
                        slow++;
					  // 如果缩容后不能大于target,直接退出
                    } else {
                        break;
                    }
                }
			  // fast-slow+1就是连续牛群的长度,判断是否小于pos,小于就进行赋值,可以用Math.min替换
                if (fast - slow + 1 < pos) {
                    pos = fast - slow + 1;
                }
            }
        }
		  // 根据是否被赋值判断有没有满足条件的连续牛群
        return (pos< nums.length+1)?pos:0;
    }
}

本题知识点分析:

1.滑动窗口

2.双指针

3.数组遍历

4.数学模拟

本题解题思路分析:

1.快指针进行求和

2.慢指针进行缩容

3.求的是连续牛群的长度

本题是双指针和滑动窗口的感觉,还是挺好做的。

本题使用编程语言: Java

如果这篇文章对您有帮助,可以点个赞支持一下,感谢~

高频面试算法题解 文章被收录于专栏

高频面试算法题解,每天一小步,人生一大步,跟着一起刷起来!

全部评论

相关推荐

10-29 22:30
吉林大学 Java
同专业学长学姐,去互联网大厂的起薪&nbsp;15k+,去国企&nbsp;IT&nbsp;岗的也有&nbsp;12k+,就连去中小厂的都基本&nbsp;13k&nbsp;起步😤&nbsp;我投的传统行业技术岗,拼死拼活拿到&nbsp;1Woffer,本来还挺开心,结果逛了圈牛客直接破防,同是校招生,行业差距怎么就这么大啊!
喵喵喵6_6:应该哪里不对吧,大厂都是20k以上的,10k那种对于985本的学生基本就是点击一下过了笔试就送的,我前两天刚拿了一个11k,笔试完第2天就打电话了,非科班。坏消息是c++岗开这么低真是刷新认知了
校招生月薪1W算什么水平
点赞 评论 收藏
分享
真tmd的恶心,1.面试开始先说我讲简历讲得不好,要怎样讲怎样讲,先讲背景,再讲技术,然后再讲提升多少多少,一顿说教。2.接着讲项目,我先把背景讲完,开始讲重点,面试官立即打断说讲一下重点,无语。3.接着聊到了项目的对比学习的正样本采样,说我正样本采样是错的,我解释了十几分钟,还是说我错的,我在上一家实习用这个方法能work,并经过市场的检验,并且是顶会论文的复现,再怎么不对也不可能是错的。4.面试官,说都没说面试结束就退出会议,把面试者晾在会议里面,丝毫不尊重面试者难受的点:1.一开始是讲得不好是欣然接受的,毕竟是学习。2.我按照面试官的要求,先讲背景,再讲技术。当我讲完背景再讲技术的时候(甚至已经开始蹦出了几个技术名词),凭什么打断我说讲重点,是不能听出人家重点开始了?这也能理解,每个人都有犯错,我也没放心上。3.我自己做过的项目,我了解得肯定比他多,他这样贬低我做过的项目,说我的工作是错误的,作为一个技术人员,我是完全不能接受的,因此我就和他解释,但无论怎么解释都说我错。凭什么,作为面试官自己不了解相关技术,别人用这个方式work,凭什么还认为这个方法是错的,不接受面试者的解释。4.这个无可厚非,作为面试官,不打招呼就退出会议,把面试者晾着,本身就是有问题。综上所述,我现在不觉得第一第二点也是我的问题,面试官有很大的问题,就是专门恶心人的,总结面试官说教,不尊重面试者,打击面试者,不接受好的面试者,技术一般的守旧固执分子。有这种人部门有这种人怎么发展啊。最后去查了一下,岗位关闭了。也有可能是招到人了来恶心人的,但是也很cs
牛客20646354...:招黑奴啊,算法工程师一天200?
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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