java 大于等于ķ的最短子数组长度

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 大于等于ķ的最短子数组长度相关的知识,希望对你有一定的参考价值。

//O(n)的方法,其实有两种方法。一个是用两个指针从左往右扫描,left和right记录满足要求的连续子数组左边界和右边界,先移动right直到期间的和大于等于k,然后再把left往右移动来缩小子数组的长度,并且更新最短子数组长度。
//第二种借用HashMap,存储累加值和索引的对应关系。先将数组从左往右累加,然后再类似于“连续子数组之和大于k的最大长度”来实现
public int minSubArrMoreK(int[] nums,int k){
  if(nums==null || nums.length==0) return 0;
  int left=0,right=0,sum=0;
  int res = nums.length+1; ;
  while(right < nums.length){
    while(sum < k && right < nums.length) sum += nums[right++];
    while(sum >= k){
      res = Math.min(res,right-left);
      sum -= nums[left++];
    }
  }
  return res==nums.length+1?0:res;
}
//分治法,Divide and Conquer

以上是关于java 大于等于ķ的最短子数组长度的主要内容,如果未能解决你的问题,请参考以下文章