题解 | #牛群保卫战#
牛群保卫战
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题目,