面试经典150题链接
面试经典 150 题 - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台
209 . 长度最小的子数组
思路 :
滑动窗口的思想,取i=j=0,向后遍历j,记录前缀和[l,r]为s,如果s>=target,那么左端点向右移动,直到s<target,维护一个[l,r]的滑动窗口,如此循环;
代码
python
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
n = len(nums)
ans = n+1
l=0
s=0
for r,x in enumerate(nums):
s+=x
while s>=target:
ans = min(ans,r-l+1)
s-=nums[l]
l+=1
return ans if ans <= n else 0
c++
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int n = nums.size();
if(n==0) return 0 ;
int sum = 0;
int l = 0 , r = 0 ;
int ans = INT_MAX ;
while(r < n){
sum += nums[r];
while(sum >= target){
ans = min(ans , r - l + 1) ;
sum -= nums[l++];
}
r++ ;
}
return ans == INT_MAX ? 0 : ans ;
}
};<

文章介绍了如何使用滑动窗口算法解决LeetCode中的几个经典问题,如长度最小的子数组、无重复字符的最长子串、串联所有单词的子串和最小覆盖子串,展示了如何通过动态调整窗口来寻找满足条件的子串。

最低0.47元/天 解锁文章
394

被折叠的 条评论
为什么被折叠?



