406. 和大于S的最小子数组

来源:互联网 发布:赚钱红包软件秒到账 编辑:程序博客网 时间:2024/06/06 10:02

题目描述

给定一个由 n 个正整数组成的数组和一个正整数 s ,请找出该数组中满足其和 ≥ s 的最小长度子数组(连续)。如果无解,则返回 -1。

样例
给定数组 [2,3,1,2,4,3] 和 s = 7, 子数组 [4,3] 是该条件下的最小长度子数组

解题思路
设立两个不断移动的指针l和r,统计满足条件的[l,r]区间的最小值

代码

public class Main {    /*     * @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) {        // write your code here        int l = 0;        int r = -1;        int result = nums.length+1;        int sum = 0 ;        while (r!=nums.length){            if (sum>=s){                sum-=nums[l];                l++;            }            else if (sum<s){                r++;                if(r<nums.length){                    sum+=nums[r];                }            }            if (sum>=s){                result=Math.min(result,r-l+1);            }        }        if (result==nums.length+1){            return -1;        }        return result;    }}
原创粉丝点击