本文主要是介绍LeetCode 面试经典150题 209.长度最小的子数组,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目:
给定一个含有 n
个正整数的数组和一个正整数 target
。
找出该数组中满足其总和大于等于 target
的长度最小的 连续子数组
[numsl, numsl+1, ..., numsr-1, numsr]
,并返回其长度。如果不存在符合条件的子数组,返回 0
。
思路:双指针
代码:
class Solution {public int minSubArrayLen(int target, int[] nums) {int n = nums.length;int ans = n + 1;int left = 0;int sum = 0;for (int right = 0; right < n; right++) {sum += nums[right];while (sum - nums[left] >= target) {sum -= nums[left++];}if (sum >= target) ans = Math.min(ans, right - left + 1);}return ans <= n ? ans : 0;}
}
性能:时间复杂度O(n) 空间复杂度O(1)
注意:长度不固定的叫做双指针,长度固定的叫做滑动窗口。习惯上而已,只是叫法不同,本质是同一个东西。
这篇关于LeetCode 面试经典150题 209.长度最小的子数组的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!