题目描述:
给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。
示例:
输入:s = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3] 是该条件下的长度最小的子数组。
思路:
虽然自己最初也想到了这种方法,但是代码各种bug,花费很长时间才解决,特此记录一下。
public class Solution {
public int minSubArrayLen(int s,int[] nums){ int startIndex = 0; int Length = Integer.MAX_VALUE; int sum = 0; for (int i = 0; i < nums.length; i++) { sum = sum + nums[i]; if (sum >= s){ Length = i - startIndex + 1<Length?i-startIndex + 1:Length; for (int j = startIndex; j < i; j++) { if (sum - nums[j] < s) break; sum = sum - nums[j]; startIndex = j + 1;
Length = i - startIndex + 1<Length?i-startIndex + 1:Length;
}
}
}
return Length == Integer.MAX_VALUE?0:Length;
}
}