LeetCode:Minimum Size Subarray Sum

来源:互联网 发布:mac os x 10.11 下载 编辑:程序博客网 时间:2024/06/10 18:11

Minimum Size Subarray Sum




Total Accepted: 41802 Total Submissions: 153088 Difficulty: Medium

Given an array of n positive integers and a positive integer s, find the minimal length of a 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.

More practice:

If you have figured out the O(n) solution, try coding another solution of which the time complexity is O(n log n).

Credits:
Special thanks to @Freezen for adding this problem and creating all test cases.

Subscribe to see which companies asked this question

Hide Tags
 Array Two Pointers Binary Search
Hide Similar Problems
 (H) Minimum Window Substring (M) Maximum Size Subarray Sum Equals k
























思路:

使用两个指针维持“最小”范围。时间复杂度是O(n)。

java code:

public class Solution {    public int minSubArrayLen(int s, int[] nums) {                int sum = 0;        int minLen = Integer.MAX_VALUE;        int end, start = 0; // 两个指针,维持最小范围        for(end = 0; end < nums.length; end++) {            sum += nums[end];            while(sum >= s) {                minLen = Math.min(minLen, end - start + 1);                sum -= nums[start++];            }        }        return minLen == Integer.MAX_VALUE ? 0 : minLen;    }}

上面说了时间复杂度是O(n)。虽然for中又套了个while,假设最坏的情况上sum每执行一次“+”,都要进行while循环,而且每次都要做“-”操作,这样也是执行1次“-”,因此总的时间是O(2n)。


0 0
原创粉丝点击