解题思路
本来的思路是双指针,左右指针找到目标范围后,左指针向右移动。
后来看到了滑动窗口这个概念,这样就可以节约一下不必要的重复了。
所谓滑动窗口,就是不断的调节子序列的起始位置和终止位置,从而得出我们要想的结果。 ——《代码随想录》
出现的问题
在计算当前窗口长度的时候,要注意是(终点指针的index - 起点指针的index + 1)。
JavaScript解法代码
/**
* @param {number} target
* @param {number[]} nums
* @return {number}
*/
var minSubArrayLen = function(target, nums) {
let results = nums.length + 1
let sum = 0
let i = 0
for (let j = 0; j < nums.length; j++) {
sum += nums[j]
while (sum >= target) {
results = Math.min(results, j-i+1)
sum -= nums[i]
i++
}
}
if (results == nums.length + 1) {
return 0
} else {
return results
}
};
Python解法代码
class Solution(object):
def minSubArrayLen(self, target, nums):
"""
:type target: int
:type nums: List[int]
:rtype: int
"""
result = len(nums)+1
sum = 0
start = 0
for j in range(len(nums)):
sum += nums[j]
while sum >= target:
result = min([result,j-start+1])
sum -= nums[start]
start+=1
if result <= len(nums):
return result
else:
return 0
总结:
- 滑动窗口其实是双指针问题的简化版,它只有一个for循环,j代表的是终止位置。
- 滑动窗口解题思路就是:
- 初始化所要用到的值:start index,窗口长度,窗口内值之和(按题目要求)
- for循环,使用终止指针来计算;其中用一个while 来保证持续判断
- 返回结果
网友评论