209. Minimum Size Subarray Sum

Posted 蓝色地中海

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了209. Minimum Size Subarray Sum相关的知识,希望对你有一定的参考价值。

Problem statement:

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.

Solution:

It looks like 53. Maximum Subarray. But they are different solutions. I solve this problem by two pointers, left and right. The return value is the min length which is greater than or equal to the target. I can control the movement of these two pointers to update the min length.

Basic idea:

  • If sum >= target, left moves to the end and minus the value of left, meanwhile update the min length.
  • One terminating condition is left > right, that means we already find the min length is 1 and return. Otherwise, I find until the end.
  • If sum < target, right moves to the end and plus the value of right.

Since left and right move at most n steps. Time complexity is O(2 * n) ---> O(n).

class Solution {
public:
    int minSubArrayLen(int s, vector<int>& nums) {
        if(nums.empty()){
            return 0;
        }
        int left = 0; 
        int right = 0;
        int sum = nums[left];
        int len = INT_MAX;
        while(left <= right && left < nums.size() && right < nums.size()){
            // if current sum is a solution
            if(sum >= s){
                // update the len
                len = min(len, right - left + 1);
                // update the sum
                // minus first and move left towards end
                sum -= nums[left++];
            } else {
                // the sum is still less than target
                // move right to the end and update the sum
                sum += nums[++right];
            }
        }
        // return 0 if no answer
        return len == INT_MAX ? 0 : len;
    }
};

 

以上是关于209. Minimum Size Subarray Sum的主要内容,如果未能解决你的问题,请参考以下文章

209. Minimum Size Subarray Sum

209. Minimum Size Subarray Sum

209. Minimum Size Subarray Sum

209. Minimum Size Subarray Sum

209. Minimum Size Subarray Sum

209. Minimum Size Subarray Sum