码迷,mamicode.com
首页 > 其他好文 > 详细

209. Minimum Size Subarray Sum

时间:2016-09-26 06:25:17      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:

Given an array of n positive integers and a positive integer s, find the minimal length of a 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.

click to show more practice.

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).

 
 
public int MinSubArrayLen(int s, int[] nums) {
        int left =0;
        int right =0;
        int res = nums.Count()+1;
        int sum =0;
        int count =0;
        while(right <= nums.Count())
        {
            if(sum>=s)
            {
                res =  Math.Min(res,right-left);
                sum -=nums[left++];
            }
            else if(right < nums.Count())
            {
                sum += nums[right];
                right++;
            }
            else right++;
        }
        
        return (res == nums.Count()+1)?0:res;
    }

 

 

另一种解法是综合DP和binary search

public int MinSubArrayLen(int s, int[] nums) {
        int size = nums.Count();
        var sums = new int[size+1];
        sums[0] =0;
        int res = size+1;
        
        for(int i =1;i<=size;i++)
        {
            sums[i] = sums[i-1]+nums[i-1];
        }
        for(int i=0;i<=size;i++)
        {
            int right = GetRightPoint(sums,sums[i]+s,i+1);
            if(right<=size)
            {
                res = Math.Min(res,right-i);
            }
            
        }
        return res==size+1?0:res;
    }
    private int GetRightPoint(int[] sums, int target, int leftPoint)
    {
        int left = leftPoint;
        int right = sums.Count()-1;
        while(left <= right)
        {
            int mid = left + (right - left)/2;
            if(sums[mid]>=target) right = mid-1;
            else left = mid+1;
        }
        return left;
    }

 

209. Minimum Size Subarray Sum

标签:

原文地址:http://www.cnblogs.com/renyualbert/p/5907752.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!