209. Minimum Size Subarray Sum

209. Minimum Size Subarray Sum

Total Accepted: 26840  Total Submissions: 105654  Difficulty: Medium

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& nums) {
        if(nums.empty())
            return 0;
        vector::iterator ite1=nums.begin();
        vector::iterator ite2=ite1;
        int minLen=INT_MAX;
        int curSum=*ite1,curLen=1;
        while(true)
        {
            if(curSum >= s )
            {   
                if(curLen 


别人的算法

(本质一样),O(N)的速度:

class Solution {
public:
    int minSubArrayLen(int s, vector& 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

你可能感兴趣的:(LeetCode,OJ,LeetCode解题报告)