标签:minimum size subarra dynamic programming
描述:
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.
If you have figured out the O(n) solution, try coding another solution of which the time complexity is O(n log n).
思路:
1.找到第一符合条件的长度
2.先加上后面的一个元素
3.如果减去前面的一个元素后sum小于target,转到2
3.减去前面的n个元素后符合条件&&减去前面的n+1个元素后不符合条件,获得一个新的长度,跟最小长度相比,小于minLen,更新minLen=newLen
4.若果start<end&&end<nums.length,转至2
代码:
public int minSubArrayLen(int s, int[] nums) { if(nums==null||nums.length==0) return 0; int start=0,end=-1; int sum=0,min=0; int temp=0; while(sum<s&&end<nums.length-1)//找到第一符合条件的长度 sum+=nums[++end]; if(sum<s) return 0; min=end-start+1; while(start<end&&end<nums.length) { if(end+1<nums.length) sum+=nums[++end]; if(sum-nums[start]<s) { if(end==nums.length-1)//已经到达最后 break; else continue;//新加元素后减去开始元素后小于s } while(start<end&&sum-nums[start]>=s)////新加元素后减去开始元素后不小于s sum-=nums[start++]; temp=end-start+1; min=min<temp?min:temp; } return min; }
leetcode_Minimum Size Subarray Sum
标签:minimum size subarra dynamic programming
原文地址:http://blog.csdn.net/mnmlist/article/details/45815627