209. Minimum Size Subarray Sum

来源:互联网 发布:关于网络舆论的法律 编辑:程序博客网 时间:2024/06/06 19:04

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.

我的解法:

1、O(nlogn)

思路:应该算是暴力解法了, 直接从数组nums[0]为起始点开始遍历,若以0为起始点没有符合条件的子序列,就从nums[1]开始找,然后2、3、4……

public class Solution {    public int minSubArrayLen(int s, int[] nums) {        int sum = 0;        int tempLen = 0;        int minLen = 0;        int machTime = 0;        if(nums.length == 0) {            return 0;        }        for(int i = 0 ;i<nums.length;i++) {            sum = 0;            tempLen = 0;            for(int j = i; j < nums.length; j++) {                sum += nums[j];                if (sum < s) {                    tempLen++;                } else {                    machTime++;                    tempLen++;                    if(machTime == 1) {                        minLen = tempLen;                    }                    minLen = tempLen<minLen ? tempLen : minLen;                    break;                }            }        }        return minLen;    }}

解法二:two pointer O(n)

思路:有int start = 0和int end = 0两个指针。不断地先向右移动end后移动start,来获取满足条件的最小的子序列

public class Solution {    public int minSubArrayLen(int s, int[] nums) {        int start = 0 ,end = 0;        int sum = 0;        int minLen = 0;        int machTime = 0;        for(end = 0;end < nums.length;end++) {            sum = sum + nums[end];            while(start <= end) {                if(sum >= s) {                    if(machTime == 0) {                        minLen = end - start + 1;                    }                    minLen = (end - start + 1) < minLen? (end - start + 1) : minLen;                    sum = sum - nums[start];                    start++;                    machTime++;                } else {                    break;                }            }        }        return minLen;    }}
0 0
原创粉丝点击