LeetCode 209. 长度最小的子数组
来源:3-7 滑动窗口 Minimum Size Subarray Sum
邹正霖
2020-11-21
这个题目,我一开始的思路就是双指针,一个从头开始,一个从末尾开始,不断缩小范围得到最小长度的子数组
但是在实现代码上碰到了问题,这样思路下:
- 在sum<s的时候要怎么处理,如果直接返回的话这时候的返回值是不对的,应该返回上一次的值,应该怎么处理呢?
- 用while(sum >= s){…}的方式可行吗?又该怎么写?
老师能否根据我这个思路写下这个方式实现的代码,谢谢老师!
class Solution {
public:
int minSubArrayLen(int s, vector<int>& nums) {
int left = 0, right = nums.size();
int sum = vecSum(nums, left, right);
while(left <= right){
//sum = vecSum(nums, left, right);
//if(sum < s)
// return right - left;
if(nums[left] <= nums[right])
left++;
else
right--;
}
return right-left;
}
int vecSum(vector<int>& nums, int left, int right){
int sum = 0;
for(int i = left; i <= right;i++)
sum += nums[i];
return sum;
}
};
写回答
1回答
-
liuyubobobo
2020-11-21
一个指针从头开始一个指针从末尾开始是不可以的。滑动窗口是可以的。
继续加油!:)
022020-11-21
相似问题