遇见YY

导航

 

题目描述:

给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。

示例:

  输入:s = 7, nums = [2,3,1,2,4,3]
  输出:2
  解释:子数组 [4,3] 是该条件下的长度最小的子数组。

思路:

  双指针法,参考官方:https://leetcode-cn.com/problems/minimum-size-subarray-sum/solution/chang-du-zui-xiao-de-zi-shu-zu-by-leetcode-solutio

  虽然自己最初也想到了这种方法,但是代码各种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;
   }


}

 

posted on 2020-08-02 10:15  一骑红尘妃子笑!  阅读(180)  评论(0编辑  收藏  举报