您的位置:首页 > 其它

LeetCode Minimum Size Subarray Sum

2015-10-11 06:51 288 查看
原题链接在这里:https://leetcode.com/problems/minimum-size-subarray-sum/

维护一个window, 当sum<s时一直移动window 的 right index, 同时更新sum.

当sum >= s后一直移动window left index, 同时更新sum 和 res.

最后返回时看res 是否 被更新过,若被更新过就返回 res, 没有更新过说明没有符合要求的window, 返回0.

Note: right的初始值是0, 所以每次更新sum 后 right 是指向了下个没有加进sum里的数值. 外循环while中的第二部分检测sum 是否 >=0 时必须使用while 循环而不是if.

e.g. [1,2,3,4,5] s = 11. 当第一次出现sum > s时 sum = 15, right = 5, 如果下面使用if 的话,只会更新一次res = 5 就会跳出外循环while, 应为此时right= 5已经不满足 外魂环while loop, right < nums.length的条件了。

AC Java:

public class Solution {
public int minSubArrayLen(int s, int[] nums) {
if(nums == null || nums.length == 0){
return 0;
}
int res = Integer.MAX_VALUE;
int left = 0;
int right = 0;
int sum = 0;
while(left < nums.length && right < nums.length){
while(right < nums.length && sum < s){
sum+=nums[right];
right++;
}
while(sum >= s){
res = Math.min(res, right-left);
sum -= nums[left];
left++;
}
}
return res == Integer.MAX_VALUE ? 0 : res;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: