题目建议: 本题关键在于理解滑动窗口,这个滑动窗口看文字讲解 还挺难理解的,建议大家先看视频讲解。 拓展题目可以先不做。
题目链接:. - 力扣(LeetCode)
文章讲解:代码随想录
视频讲解:拿下滑动窗口! | LeetCode 209 长度最小的子数组_哔哩哔哩_bilibili
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int sum=0;
int result=INT32_MAX;
int i=0;
int subLength=0;
for(int j=0;j<nums.size();j++){
sum+=nums[j];
while(sum>=target){
subLength=(j-i+1);
result = result < subLength ? result : subLength;
sum-=nums[i++];
}
}
return result == INT32_MAX ? 0 : result;
错误原因:完全没有思路,其实就是用for移动滑动窗口尾巴用while移动滑动窗口的开头。
因为是用滑动窗口的思想,先定义元素求和值sum,结果子数组长度,临时子数组长度,滑动窗口的起始点i=0.
然后用外圈的for循环去移动滑动窗口的尾巴索引也就是j,然后每次循环都内嵌一个while循环只要sum大于target就不断地移动滑动窗口的开头索引i,然后sum不断减去滑动窗口的第一个元素;还要判断结果子数组和滑动窗口的长度大小关系。大小循环结果后返回result。