题解 | #牛群保卫战# 双指针
牛群保卫战
https://www.nowcoder.com/practice/c836930db162418f87874ac5ba84726b
知识点
双指针
思路
维护两个指针,右指针表示枚举每一段的末尾,每次向后移动一位,左指针每次移动到合法的最左端即可,之后如果满足条件则更新答案。时间复杂度
AC Code(C++)
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param target int整型
* @param nums int整型vector
* @return int整型
*/
int findMinSubarrayLength(int target, vector<int>& nums) {
int n = nums.size(), res = 0x3f3f3f3f;
int sum = 0;
for (int i = 0, j = 0; i < n; i ++) {
sum += nums[i];
while (j < i and sum - nums[j] >= target) {
sum -= nums[j ++];
}
if (sum >= target) res = min(res, i - j + 1);
}
return res == 0x3f3f3f3f ? 0 : res;
}
};
查看7道真题和解析