【前端算法每日一题】leetcode-209-长度最小的子数组

106 阅读1分钟

题目描述

  • 给定一个含有 n个正整数的数组和一个正整数 target
  • 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度 如果不存在符合条件的子数组,返回 0 

解题思路

  • 这次代码给大家加了注释,之后也会加注释的
  • 双指针法(快慢指针)
  • 满足条件时移动慢指针
  • 不满足条件时移动快指针
  • 有点滑动窗口的意思,哈哈哈

解题代码(JavaSctipt)

var minSubArrayLen = function (target, nums) {
  // nums数组长度
  let len = nums.length;
  // 当前数组和
  let curSum = 0;
  // 慢指针
  let slow = 0;
  // 快指针
  let fast = 0;
  // 最小数组长度
  let minLen = 0;
  while (fast < len) {
    if (curSum + nums[fast] >= target) {
      // (当前数组和)与(当前快指针元素)之和大于(目标值)
      // 更新最小数组长度
      minLen =
        minLen === 0 ? fast - slow + 1 : Math.min(minLen, fast - slow + 1);
      // 更新当前数组和
      curSum -= nums[slow];
      // 慢指针向右移动
      slow++;
    } else {
      // 否则
      // 更新当前数组和
      curSum += nums[fast];
      // 快指针向右移动
      fast++;
    }
  }
  return minLen;
};