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);
  • 相关阅读:
    关于Handler中Message的创建问题
    Android的组件化和模块化
    Android 和 JS交互方法初探
    synchronized相关用法简述
    关于导入高德地图 java.lang.UnsatisfiedLinkError: Couldn't load XXXfrom loader dalvik.system.PathClassLoader[DexPathLis
    圆的变化(自定义动画,及自定义UI)
    依赖注入
    PHP错误代号列表
    windows 系统错误码总结
    composer
  • 原文地址:https://www.cnblogs.com/codeskiller/p/6489865.html
Copyright © 2011-2022 走看看