长度最小的子数组
1. 题目描述
提示
题目链接:https://leetcode.cn/problems/minimum-size-subarray-sum/description/
2. 解题思路
核心总结
- 核心思想:滑动窗口(毛毛虫思想)。设定终止位置
j 往后累加,当窗口和大于等于 target 时,通过移动起始位置 i 来缩小窗口。这样只需一次遍历,防止超时。
💡 易错点
注意窗口滑动的触发条件(while 而非 if),确保找到最小长度。
3. 代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| class Solution {
public int minSubArrayLen(int target, int[] nums) {
int result = 1000000000;
int i = 0,sum = 0;
for(int j=0;j<nums.length;j++){
sum += nums[j];
while(sum>=target){
int sub = j - i + 1;
result = (result<sub) ? result : sub;
sum -= nums[i];
i++;
}
}
if(result == 1000000000){
result = 0;
}
return result;
}
}
|
4. 复杂度分析
- 时间复杂度:$O(n)$
- 空间复杂度:$O(1)$
5. 总结与反思