LeetCode 209. Minimum Size Subarray Sum
来源:互联网 发布:查看手机屏幕信息软件 编辑:程序博客网 时间:2024/06/11 01:33
问题描述
Given an array of n positive integers and a positive integer s, find the minimal length of a contiguous subarray of which the sum ≥ s. If there isn’t one, return 0 instead.
For example, given the array [2,3,1,2,4,3] and s = 7,
the subarray [4,3] has the minimal length under the problem constraint.
click to show more practice.
Credits:
Special thanks to @Freezen for adding this problem and creating all test cases.
问题分析
给定一个数组nums[],给定一个数target。求nums中连续子集的和等于target。求出这些子集中长度最小的。遇到连续子集算法的实现有两种,一种是滑动窗口,窗口的条件是sum>= target,这种的复杂度是O(n)。第二种是求前n个的和,这里需要把sum[0]设置为0,这个算法的复杂度是O(nlogn)
代码实现
public int minSubArrayLen(int s, int[] nums) { //找出和大于s的 nums中的子序列最小的长度 //使用滑动窗口中和》= nums的的窗口,找到 int minLength = Integer.MAX_VALUE; int leftIndex = 0; int rightIndex = 0; int sum = 0; int length = 0; while (sum >= s || rightIndex < nums.length) {//如何确定边界 if (sum < s) {// 在小于的时候 length++; sum = sum + nums[rightIndex]; rightIndex++; } else {//大于等于的时候 minLength = Math.min(length, minLength); sum = sum - nums[leftIndex]; leftIndex++; length--; } } if (minLength == Integer.MAX_VALUE) { return 0; } return minLength; }
滑动窗口实现。
代码实现二
public int minSubArrayLen(int s, int[] nums) { if (nums == null || nums.length == 0) { return 0; } int minLenget = Integer.MAX_VALUE; int[] sums = new int[nums.length + 1]; sums[0] = 0; for (int i = 1; i < sums.length; i++) { sums[i] = sums[i - 1] + nums[i - 1]; } for (int i = 0; i < sums.length; i++) { int sum = sums[i] + s; int nexNum = nextIndex(sums, sum, i); if (nexNum == sums.length) { break; } minLenget = Math.min(minLenget, nexNum - i); } if (minLenget == Integer.MAX_VALUE) { return 0; } return minLenget; } /** * 找出sums中第一个等于大于num的值的下标 * * @param sums * @param num * @return */ protected int nextIndex(int[] sums, int num, int left) { int start = left; int end = sums.length - 1; while (start <= end) { int mid = (start + end) / 2; if (sums[mid] == num) { return mid; } else if (sums[mid] > num) { end = mid - 1; } else if (sums[mid] < num) { start = mid + 1; } } return start; }
阅读全文
0 0
- [leetcode] 209.Minimum Size Subarray Sum
- 【leetcode】209. Minimum Size Subarray Sum
- <LeetCode OJ> 209. Minimum Size Subarray Sum
- [Leetcode]209. Minimum Size Subarray Sum
- [LeetCode]209. Minimum Size Subarray Sum
- leetcode 209. Minimum Size Subarray Sum
- 209. Minimum Size Subarray Sum LeetCode
- LeetCode 209. Minimum Size Subarray Sum
- LeetCode *** 209. Minimum Size Subarray Sum
- 【leetcode】209. Minimum Size Subarray Sum
- LeetCode 209. Minimum Size Subarray Sum
- leetcode.209. Minimum Size Subarray Sum
- 【LeetCode】209. Minimum Size Subarray Sum
- [Leetcode]209. Minimum Size Subarray Sum
- [leetcode]209. Minimum Size Subarray Sum[存疑]
- [leetcode] 209. Minimum Size Subarray Sum
- leetcode 209. Minimum Size Subarray Sum
- leetcode 209. Minimum Size Subarray Sum
- Git使用集锦
- uva 11181 条件概率
- matlab中的uint8
- 解决Ubuntu的root账号无法登录SSH问题-Permission denied, please try again.
- windows安装配置mysql实测成功
- LeetCode 209. Minimum Size Subarray Sum
- python修改目录下指定后缀的文件名
- Ruby中的map, reduce, select, reject, group_by理解
- bs4爬虫:获取双色球中奖信息
- Oracle日期类型转换格式
- 欢迎使用CSDN-markdown编辑器
- Groovy语言
- iOS开发 调试 网络限速
- php与mysql函数库的使用