@requires_authorization
@author johnsondu
@create_time 2015.8.11 17:15
@url [minimum-size-subarray-sum](https://leetcode.com/problems/minimum-size-subarray-sum/)
/**
* @description 从第一个元素开始累加和
* 当超过给定的s时,此时从最开始的ori点处
* 开始,用sum减去,直到此时的sum再次小于
* s。注意,期间一旦sum >= s时,求最小的
* 元素数。
* @time_complexity O(n)
* @space_complexity O(1)
*/
class Solution {
public:
int min(int a, int b) {
return a > b ? b : a;
}
int minSubArrayLen(int s, vector<int>& nums) {
if(nums.size() == 0) return 0;
int cur = nums[0];
int sum = cur;
int res;
if(sum >= s) res = 1;
else res = 0xffffff;
int ori = 0;
int idx = 1;
int len = nums.size();
while(idx < len) {
sum += nums[idx];
if(sum >= s) res = min(res, idx - ori + 1);
while(ori < idx && sum - nums[ori] >= s) {
res = min(res, idx - ori);
sum -= nums[ori];
ori += 1;
}
idx ++;
}
if(res == 0xffffff) return 0;
else return res;
}
};
版权声明:本文为博主原创文章,未经博主允许不得转载。
【leetcode】209. Minimum Size Subarray Sum
原文:http://blog.csdn.net/zone_programming/article/details/47423685