首页 > 其他 > 详细

LeetCode Minimum Size Subarray Sum

时间:2015-10-11 07:54:44      阅读:254      评论:0      收藏:0      [点我收藏+]

原题链接在这里: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:

 1 public class Solution {
 2     public int minSubArrayLen(int s, int[] nums) {
 3         if(nums == null || nums.length == 0){
 4             return 0;
 5         }
 6         int res = Integer.MAX_VALUE;
 7         int left = 0;
 8         int right = 0;
 9         int sum = 0;
10         while(left < nums.length && right < nums.length){
11             while(right < nums.length && sum < s){
12                 sum+=nums[right];
13                 right++;
14             }
15             while(sum >= s){
16                 res = Math.min(res, right-left);
17                 sum -= nums[left];
18                 left++;
19             }
20         }
21         return res == Integer.MAX_VALUE ? 0 : res;
22     }
23 }

 

LeetCode Minimum Size Subarray Sum

原文:http://www.cnblogs.com/Dylan-Java-NYC/p/4868734.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!