@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
最新推荐文章于 2024-04-06 21:55:58 发布
本文介绍了一个高效的算法,用于解决寻找给定数组中累加和首次达到特定目标值的最小子数组长度的问题。该算法采用一次遍历的方式,通过动态调整子数组的起始和结束位置来实现O(n)的时间复杂度。
1200

被折叠的 条评论
为什么被折叠?



