zoukankan      html  css  js  c++  java
  • 209. Minimum Size Subarray Sum

    Given an array of n positive integers and a positive integer s, find the minimal length of a contiguous subarray of which the sum ≥ s. If there isn't one, return 0 instead.

    For example, given the array [2,3,1,2,4,3] and s = 7,
    the subarray [4,3] has the minimal length under the problem constraint.

    More practice:

    If you have figured out the O(n) solution, try coding another solution of which the time complexity is O(n log n).

     1 public class Solution {
     2     public int minSubArrayLen(int s, int[] nums) {
     3         if(nums==null||nums.length==0) return 0;
     4         int left = 0;
     5         int right = 0;
     6         int sum = 0;
     7         int count = Integer.MAX_VALUE;
     8         while(right<nums.length){
     9             sum+=nums[right];
    10             while(sum>=s){
    11                 count = Math.min(count,right-left+1);
    12                 sum-=nums[left];
    13                 left++;
    14             }
    15             right++;
    16         }
    17         return count==Integer.MAX_VALUE?0:count;
    18     }
    19 }
    20 //the time couplexity could be O(n),the space complexity could be O(1);
     1 public class Solution {
     2     public int minSubArrayLen(int s, int[] nums) {
     3         int[] sums = new int[nums.length+1];
     4         for(int i=0;i<nums.length;i++){
     5             sums[i+1] = sums[i]+nums[i];
     6         }
     7         int min = Integer.MAX_VALUE;
     8         for(int i=0;i<sums.length;i++){
     9             int end = binarysearch(sums,i+1,sums.length-1,sums[i]+s);
    10             if(end==sums.length) break;
    11             if(end-i<min) min = end-i;
    12         }
    13         return min==Integer.MAX_VALUE?0:min;
    14     }
    15     public int binarysearch(int[] sums,int left,int right,int target){
    16         while(left<=right){
    17             int mid = left+(right-left)/2;
    18             if(sums[mid]<target){
    19                 left = mid+1;
    20             }else{
    21                 right = mid-1;
    22             }
    23         }
    24         return left;
    25     }
    26 }
    27 // the time complexity could be nlogn,the space complexity could be O(1);
  • 相关阅读:
    BZOJ3832: [Poi2014]Rally(拓扑排序 堆)
    UVAlive6807 Túnel de Rata (最小生成树)
    UVAlive6800The Mountain of Gold?(负环)
    cf623A. Graph and String(二分图 构造)
    BZOJ4144: [AMPPZ2014]Petrol(最短路 最小生成树)
    cf605D. Board Game(BFS 树状数组 set)
    为什么要去创业?
    后缀数组练习题若干
    Android开发 之 我的jar包引用方法
    IBM-ETP 实训项目前一天
  • 原文地址:https://www.cnblogs.com/codeskiller/p/6489865.html
Copyright © 2011-2022 走看看