题解 | #牛群保卫战#

牛群保卫战

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

考察知识点:数组,窗口移动

题目分析:该题可以通过设置一个左值为 left,右值为right的窗口,并计算窗口的内部的值的总和,之后将大于等于target的值记录下来,并选取最小的那个窗口作为输出。如下代码流程

采用的编程语言: C

完整的编码代码:如下所示

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param target int整型 
 * @param nums int整型一维数组 
 * @param numsLen int nums数组长度
 * @return int整型
 */
int findMinSubarrayLength(int target, int* nums, int numsLen ) {
    int right = 0,  left = 0;
    int min_len = numsLen;
    int tmp_nums = 0, flag  = 0;

    while (right <= numsLen && left <= numsLen) {
        if (tmp_nums < target) {		// tmp_nums变量用于保存窗口内的数据总和,如果窗口的总和小于target的话,窗口的右边往右移动一格,扩展窗口的范围
            tmp_nums += nums[right];
            right++;
        } else {		// 如果窗口的数据总和大于target,那么就尝试缩小窗口的大小,寻找一格满足要求的最最小窗口
            tmp_nums -= nums[left];
            left++;
        }

	  	// 当当前窗口内的数字总和大于等于target的时候,就判断最小长度和当前的窗口的长度,如果窗口长度小于记录的最小长度,就刷新最小长度为当前的窗口长度
        if (tmp_nums >= target && min_len >= (right - left)) {
            min_len =  right - left;
            flag  = 1;		// 如果有记录到窗口内的值有大于target的话,flag置1
        }
    }

    if (flag == 0)		//如果没有找到一个合适的窗口,使窗口的值大于target的情况下,flag为0,最小长度应该也为0
        min_len =  0;

    return min_len;
}

面试高频TOP202解析 文章被收录于专栏

采用Java,C,Python等方法去解答面试高频TOP202题目,

全部评论

相关推荐

10-13 22:56
门头沟学院 C++
rt,鼠鼠的浪潮网签明天过期,鼠鼠是山东人,好像自己也能接受。之前的面试大厂基本挂干净了,剩下小米二面后在泡,问了下面试官没有挂,但要泡。还有海信似乎也通过了,不过在深圳,鼠鼠也不是很想去。其它还有一些公司应该陆陆续续还有一些面试,现在有些纠结是直接签了还是再等再面呢?大佬们能不能给鼠鼠提一些意见,万分感谢!!!
牛客78696106...:浪潮可不是开摆,当初我还是开发的时候我组长跟我说他们组有段时间天天1,2点走,早上5点就来,全组肝出来心肌炎,浪潮挣钱省立花可不是说说,当然也看部门,但是浪潮普遍就那dio样,而且你算下时薪就知道不高,没事也是9点半走,不然算你旷工
投递小米集团等公司10个岗位
点赞 评论 收藏
分享
迷茫的大四🐶:看来已经准备换人了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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