题解 | #牛群保卫战#
牛群保卫战
https://www.nowcoder.com/practice/c836930db162418f87874ac5ba84726b
考察的知识点:双指针、滑动窗口;
解答方法分析:
- 定义两个指针 left 和 right,初始时都指向数组的第一个元素。
- 定义变量 sum 用于记录当前窗口内元素的和,初始化为 0。
- 完成以下操作直到 right 指针遍历完整个数组:将 nums[right] 加入到 sum 中。如果 sum 大于等于 target,则说明当前窗口内的元素和满足条件,计算当前窗口的长度(right - left + 1),并将它与当前最小长度进行比较,更新最小长度。将 left 指针向右移动一位,并将 nums[left] 从 sum 中减去。继续移动 right 指针,重复上述步骤。
- 如果最小长度仍然为初始值,说明没有满足条件的连续牛群,返回 0;否则返回最小长度。
所用编程语言:C++;
完整编程代码:↓
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param target int整型
* @param nums int整型vector
* @return int整型
*/
int findMinSubarrayLength(int target, vector<int>& nums) {
int n = nums.size();
int left = 0;
int right = 0;
int sum = 0;
int minLen = INT_MAX;
while (right < n) {
sum += nums[right];
while (sum >= target) {
minLen = min(minLen, right - left + 1);
sum -= nums[left];
left++;
}
right++;
}
return minLen == INT_MAX ? 0 : minLen;
}
};
查看21道真题和解析


