LeetCode LCR 008. 长度最小的子数组

题目描述

LCR 008. 长度最小的子数组

思路分析

解法一:滑动窗口(推荐)

核心思路

  • 用双指针维护窗口和当前和。
  • 右指针扩展直到满足条件,再收缩左指针以缩短长度。
  • 持续更新最短长度。

复杂度分析

  • 时间复杂度:O(n),其中 n 表示数组长度。
  • 空间复杂度:O(1),仅使用常数额外空间。
class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        int left = 0;
        int sum = 0;
        int ans = Integer.MAX_VALUE;

        for (int right = 0; right < nums.length; right++) {
            sum += nums[right];

            while (sum >= target) {
                ans = Math.min(ans, right - left + 1);
                sum -= nums[left];
                left++;
            }
        }

        return ans == Integer.MAX_VALUE ? 0 : ans;
    }
}
func minSubArrayLen(target int, nums []int) int {
	left := 0
	sum := 0
	ans := 1<<31 - 1

	for right := 0; right < len(nums); right++ {
		sum += nums[right]
		for sum >= target {
			if right-left+1 < ans {
				ans = right - left + 1
			}
			sum -= nums[left]
			left++
		}
	}

	if ans == 1<<31-1 {
		return 0
	}
	return ans
}

相似题目

题目 难度 考察点
713. 乘积小于 K 的子数组 中等 滑动窗口
3. 无重复字符的最长子串 中等 滑动窗口
76. 最小覆盖子串 困难 滑动窗口
209. 长度最小的子数组 中等 滑动窗口
1004. 最大连续1的个数 III 中等 滑动窗口
本文作者:
本文链接: https://hgnulb.github.io/blog/2026/61934719
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!