美文网首页
209.长度最小的子数组

209.长度最小的子数组

作者: 胖胖的熊管家 | 来源:发表于2023-06-14 19:40 被阅读0次

解题思路

本来的思路是双指针,左右指针找到目标范围后,左指针向右移动。
后来看到了滑动窗口这个概念,这样就可以节约一下不必要的重复了。

所谓滑动窗口,就是不断的调节子序列的起始位置和终止位置,从而得出我们要想的结果。 ——《代码随想录》

视频讲解

出现的问题

在计算当前窗口长度的时候,要注意是(终点指针的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

总结:

  1. 滑动窗口其实是双指针问题的简化版,它只有一个for循环,j代表的是终止位置。
  2. 滑动窗口解题思路就是:
  1. 初始化所要用到的值:start index,窗口长度,窗口内值之和(按题目要求)
  2. for循环,使用终止指针来计算;其中用一个while 来保证持续判断
  3. 返回结果

相关文章

网友评论

      本文标题:209.长度最小的子数组

      本文链接:https://www.haomeiwen.com/subject/pfdprdtx.html