leetcode 209.长度最小的子数组
题目给定一个含有n个正整数的数组和一个正整数target。找出该数组中满足其总和大于等于target的长度最小的子数组[numsl, numsl1, ..., numsr-1, numsr]并返回其长度。如果不存在符合条件的子数组返回0。常规思想双重循环嵌套解题思想滑动窗口双指针变量解释minlen:用于返回符合题意的最短数组长度left:滑动窗口左边界循环变量i:终结下标可以理解为右边界sum:用于计算数组中元素之和解题思路每个元素作为窗口右边界时我们通过收缩左边界找到了以该元素结尾的最短满足条件的子数组。循环遍历数组元素查看单个数组元素是否target如果存在-满足题意的最短数组长度为1直接返回1否则累加数组元素到sum中如果循环结束都不满足题意即minlen的大小保持为初始值则返回0。不要忘记了累加过程中出现sumtarget,重新计算minlen右边界-左边界1需要和上一个满足题意的minlen进行大小比较找出最短的。然后sum-当前左边界的数左边界右移实现数组左窗口缩小。依次循环直至遍历结束最终若是找到最短的子数组则返回minlen代码class Solution { public int minSubArrayLen(int target, int[] nums) { int minlen nums.length1; int left 0; int sum 0; for(int i0;inums.length;i){ if(nums[i]target){ return 1; } sumnums[i]; while(sumtarget){ minlen Math.min(minlen,i-left1); sum-nums[left]; } } return minlen nums.length1?0:minlen; } }