Leetcode NO.209 Minimum Size Subarray Sum
2015-05-16 02:04
405 查看
本题题目要求如下:
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
the subarray
还有一个额外要求,就没有写,只是用最基本的方法做了出来。。
我的大概思路就是设定两个pointer,一个是指向目标subarray的最前面的元素,另外一个指向最后面的元素。
伪代码如下:
for (front_pointer from 0 to n):
sum += nums[front];
while (sum > 0):
mini_length = min(mini_length, back_pointer - front_pointer + 1);
nums[slow];
++slow;
这样最后mini_length就是我们要求的值。
外层for循环很好懂,主要是里面的while循环:
比如题目中给出了[2,3,1,2,4,3],
某一时刻,会有[3,1,2] = 6 < 7,所以此时front向后移动,
则为[3,1,2,4] = 10 > 7,此时min_length是4,但是显然不是4,我们在移动front_pointer之前还要再次移动back_pointer变成[1,2,4],测得mini_length = 3,之后变为[2,4],小于7,此时才可以将front_pointer向后移动。。
完整代码如下:
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.
还有一个额外要求,就没有写,只是用最基本的方法做了出来。。
我的大概思路就是设定两个pointer,一个是指向目标subarray的最前面的元素,另外一个指向最后面的元素。
伪代码如下:
for (front_pointer from 0 to n):
sum += nums[front];
while (sum > 0):
mini_length = min(mini_length, back_pointer - front_pointer + 1);
nums[slow];
++slow;
这样最后mini_length就是我们要求的值。
外层for循环很好懂,主要是里面的while循环:
比如题目中给出了[2,3,1,2,4,3],
某一时刻,会有[3,1,2] = 6 < 7,所以此时front向后移动,
则为[3,1,2,4] = 10 > 7,此时min_length是4,但是显然不是4,我们在移动front_pointer之前还要再次移动back_pointer变成[1,2,4],测得mini_length = 3,之后变为[2,4],小于7,此时才可以将front_pointer向后移动。。
完整代码如下:
class Solution { public: int minSubArrayLen(int s, vector<int>& nums) { int slow = 0; int fast = 0; int sum_buff = 0; int min_len = INT_MAX; for (fast = 0; fast < nums.size(); ++fast) { sum_buff += nums[fast]; while (sum_buff >= s) { min_len = min(min_len, fast-slow+1); sum_buff -= nums[slow]; ++slow; } } if (min_len == INT_MAX) return 0; else return min_len; } };
相关文章推荐
- [Leetcode 209, Medium] Minimum Size Subarray Sum
- leetcode 209 : Minimum Size Subarray Sum
- [leetcode][two pointers] Minimum Size Subarray Sum
- [LeetCode]Minimum Size Subarray Sum
- LeetCode之Minimum Size Subarray Sum
- Minimum Size Subarray Sum -- leetcode
- LeetCode 209 - Minimum Size Subarray Sum
- leetcode 日经贴,Cpp code -Minimum Size Subarray Sum
- LeetCode Minimum Size Subarray Sum
- LeetCode(209) Minimum Size Subarray Sum
- LeetCode:Minimum Size Subarray Sum
- Leetcode_Minimum Size Subarray Sum
- LeetCode 209 - Minimum Size Subarray Sum
- [leetcode]Minimum Size Subarray Sum
- [leetCode] Minimum Size Subarray Sum
- LeetCode[209] Minimum Size Subarray Sum
- LeetCode—Minimum Size Subarray Sum
- LeetCode -- Minimum Size Subarray Sum
- LeetCode-Minimum Size Subarray Sum
- Leetcode 209 Minimum Size Subarray Sum