长度最小的子数组

题目:给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
思路:设立左、右两个指针,然后开始移动右指针,当目前窗口的总和 >= target,开始移动左指针,并记录左指针移动过程中,满足条件的最小值,并更新目前窗口总和。
代码:

  1. class Solution {
  2. public int minSubArrayLen(int target, int[] nums) {
  3. int l = 0, sum = 0, min = Integer.MAX_VALUE;
  4. for(int r = 0; r < nums.length; r++) {
  5. sum += nums[r];
  6. while(sum >= target) {
  7. min = Math.min(min, r - l + 1);
  8. sum -= nums[l++];
  9. }
  10. }
  11. return min == Integer.MAX_VALUE? 0 : min;
  12. }
  13. }