209. Minimum Size Subarray Sum
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.
分析:
这个题目一来就应该想到应该一点一点累加恰好找到这个s的累加和,统计出长度
 所以接着缩小数据,再次找到恰好大于s的位置,更新最小长度,恰好是为了尽可能小
 具体:用一个迭代器慢ite1,一个迭代器快ite2
 如果当前序列的和小于s则ite2继续右移动(增加和),否则ite1右移动(相当于减小和)
 
class Solution {
public:
    int minSubArrayLen(int s, vector<int>& nums) {
        if(nums.empty())
            return 0;
        vector<int>::iterator ite1=nums.begin();
        vector<int>::iterator ite2=ite1;
        int minLen=INT_MAX;
        int curSum=*ite1,curLen=1;
        while(true)
        {
            if(curSum >= s )
            {   
                if(curLen <minLen)
                    minLen=curLen;
                curSum-=*ite1;
                ite1++;
                curLen--;
                continue;
            }
            ite2++;
            if(ite2==nums.end())
                break;
            curLen++;
            curSum+=*ite2;
        }
        
        if(minLen==INT_MAX)
            return 0;
        return minLen;    
    }
};
 
别人的算法
(本质一样),O(N)的速度:
class Solution {
public:
    int minSubArrayLen(int s, vector<int>& nums) {
        int n = nums.size(), start = 0, sum = 0, minlen = INT_MAX;
        for (int i = 0; i < n; i++) { 
            sum += nums[i]; 
            while (sum >= s) {
                minlen = min(minlen, i - start + 1);
                sum -= nums[start++];
            }
        }
        return minlen == INT_MAX ? 0 : minlen;
    }
};
 
注:本博文为EbowTang原创,后续可能继续更新本文。如果转载,请务必复制本条信息!
原文地址:http://blog.csdn.net/ebowtang/article/details/50453943
原作者博客:http://blog.csdn.net/ebowtang
 
                   
                   
                   
                   
                             针对给定的正整数数组及目标和s,寻找满足条件的最小子数组长度。通过双指针法实现O(N)复杂度算法,分享两种实现方式。
针对给定的正整数数组及目标和s,寻找满足条件的最小子数组长度。通过双指针法实现O(N)复杂度算法,分享两种实现方式。
           
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
              
             
                   1167
					1167
					
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
            


 
            