指针法: 假设 [i,j] 区间内的连续子数组的和正好等于 s,那么该子数组的长度为 j-i+1;但是数组中可能有许多个连续子数组的和正好等于 s,因此我们需要继续向后搜索,并用 minLen 标记最小长度。
在后面附上演示。
/** * @param {number} s * @param {number[]} nums * @return {number} */ var minSubArrayLen = function(s, nums) { if (nums.length == 0) return 0; let head = 0; let tail = 0; let minLen = Infinity; let sum = 0; while (tail < nums.length) { sum += nums[tail]; while (sum >= s) { minLen = Math.min(minLen, tail - head + 1); sum -= nums[head]; head++; } tail++; } return minLen == Infinity ? 0 : minLen; };
知乎:叄贰壹
简书:带只拖鞋去流浪
关注我,带你一起写bug
warning :未经授权,不得转载
有问题的小伙伴请在下方留言,喜欢就点个赞吧