package com.zerroi.leetcode.Three13; import java.util.Arrays; public class MinSubArrayLen { public static void main(String[] args) { SolutionSecond solutionSecond = new SolutionSecond(); // int res = solutionSecond.minSubArrayLen(7, new int[]{2, 3, 1, 2, 4, 3}); int res = solutionSecond.minSubArrayLen(11, new int[]{1,2,3,4,5}); // int res = solutionSecond.minSubArrayLen(11, new int[]{1, 1, 1, 1, 1, 1, 1, 1}); System.out.println("res = " + res); } } /* 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续 子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 */ class SolutionSecond { public int minSubArrayLen(int target, int[] nums) { int sum = 0; int minLen = Integer.MAX_VALUE; int index = 0; for (int i = 0; i < nums.length; i++) { sum += nums[i]; while (sum >= target) { minLen = Math.min(minLen, index - i + 1); sum -= nums[index]; index ++; } } return minLen == Integer.MAX_VALUE ? 0 : minLen; } }