题解 | #长度最小的连续子数组#
长度最小的连续子数组
http://www.nowcoder.com/practice/10dd5f8c5d984aa3bd69788d86aaef23
双指针
- sum 记录区间内的和
- sum > target 记录 较小的长度 l++ (如果采取r++,结果只会更大,长度会更长,没必要)
- 否则 r++ 直至循环结束
- 注意 最小可能为1 单个值 已经 >= target
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型vector
* @param target int整型
* @return int整型
*/
int minSubarray(vector<int>& nums, int target) {
// write code here
int l = 0, r = 0;
int n = nums.size();
int sum = 0;
int MinLen = 100002;
while (r < n && l <= r){
if(nums[r] >= target)return 1;
if(sum + nums[r] < target){
sum += nums[r];
r++;
}
else {
sum -= nums[l];
MinLen = min(r-l+1, MinLen);
l++;
}
}
return MinLen;
}
};