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:
维护一个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; } }
相关文章推荐
- LeetCode Algorithms #290 <Word Pattern>
- 004 Conditionals In java JAVA中的条件句
- 企业网盘(云协作)列表
- 循环队列实现
- 双系统,ubuntu下修复windows 10引导
- 2048最高分
- 20135202闫佳歆——信息安全系统设计基础第五周学习总结
- [C/C++基础知识] 一篇就让你彻底搞懂qsort快速排序的文章
- Leetcode NO.125 Valid Palindrome
- *LeetCode-Longest Valid Parentheses
- 张益唐的有用性
- RabbitMQ实例教程:发布/订阅者消息队列
- 第五周学习任务报告
- LeetCode Course Schedule II
- Android ViewPager前两页显示空白
- Container With Most Water
- 84款 数据备份开源软件
- Rails读书笔记第二章
- 合并子目录所有文本文件的批处理
- excel减肥过滤广告