数组-长度最小子数组

65 阅读1分钟

滑动窗口

题目 LC209 leetcode.cn/problems/mi…

题解

public int minSubArrayLen(int target, int[] nums) {
    // 初始化左指针
    int left = 0;
    // 初始化当前子数组的和
    int sum = 0;
    // 初始化结果为最大整数值
    int res = Integer.MAX_VALUE;
​
// 遍历数组,右指针从头到尾扫描数组
for (int right = 0; right < nums.length; right++) {
    // 将当前右指针指向的值加到 sum 中
    sum += nums[right];
    
    // 当当前子数组的和大于等于目标值时
    while (sum >= target) {
        // 更新结果为当前子数组长度的最小值
        res = Math.min(res, right - left + 1);
        // 将左指针指向的值从 sum 中减去
        sum -= nums[left];
        // 左指针右移一位
        left++;
    }
}
​
// 如果结果仍为最大整数值,表示没有找到符合条件的子数组,返回 0;否则返回结果
return res == Integer.MAX_VALUE ? 0 : res;
​
}