长度最小的子数组

长度最小的子数组

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. 总结与反思


本文已被观测了
« 上一篇 主页 下一篇 »