[Lintcode]Minimum Size Subarray Sum 和大于S的最小子数组

来源:互联网 发布:看股票行情的软件 编辑:程序博客网 时间:2024/05/18 01:53

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 -1 instead.

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.

分析:双指针,当sum大于s时,移动左指针,当sum小于0时,初始化左指针,当s小于s时,移动右指针

public class Solution {    /**     * @param nums: an array of integers     * @param s: an integer     * @return: an integer representing the minimum size of subarray     */    public int minimumSize(int[] nums, int s) {        int left = 0, right = 0;        int res = Integer.MAX_VALUE, min = 0;        int sum = 0;        while(right < nums.length) {            sum += nums[right];            min += 1;            if(sum >= s) {                while(left <= right && sum >= s) {                    sum -= nums[left];                    left ++;                    min --;                }                res = Math.min(min + 1, res);            } else if(sum < 0) {                sum = 0;                left = right + 1;                if(left >= nums.length) break;                min = 0;            } else {                //            }            right ++;        }                return res == Integer.MAX_VALUE ? -1 : res;    }}



0 0
原创粉丝点击