跳到主要内容

209.长度最小的子数组

链接:209.长度最小的子数组
难度:Medium
标签:数组、二分查找、前缀和、滑动窗口
简介:给定一个含有  n  个正整数的数组和一个正整数  s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组,并返回其长度。如果不存在符合条件的连续子数组,返回 0。

题解 1 - typescript

  • 编辑时间:2020-06-28
  • 执行用时:68ms
  • 内存消耗:36.3MB
  • 编程语言:typescript
  • 解法介绍:双指针,滑动窗口。
function minSubArrayLen(s: number, nums: number[]): number {
const len = nums.length;
let i = 0,
minLen = Infinity,
sum = 0;
for (let j = 0; j < len; j++) {
sum += nums[j];
while (sum >= s) {
minLen = Math.min(minLen, j - i + 1);
sum -= nums[i++];
}
}
return minLen === Infinity ? 0 : minLen;
}

题解 2 - cpp

  • 编辑时间:2021-12-24
  • 执行用时:4ms
  • 内存消耗:10.2MB
  • 编程语言:cpp
  • 解法介绍:双指针。
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int l = 0, r = 0, num = 0, ans = INT_MAX, n = nums.size();
while (r < n) {
while (r < n && num < target) num += nums[r++];
while (l < r && num - nums[l] >= target) num -= nums[l++];
if (num >= target) ans = min(ans, r - l);
num -= nums[l++];
}
return ans == INT_MAX ? 0 : ans;
}
};