标签:font vector com ref ++ already nbsp turn ready
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:
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
标签:font vector com ref ++ already nbsp turn ready
原文地址:http://www.cnblogs.com/wdw828/p/6876434.html