LintCode-和大于S的最小子数组

来源:互联网 发布:意大利帅哥知乎 编辑:程序博客网 时间:2024/06/05 11:46

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

您在真实的面试中是否遇到过这个题? 
Yes
样例

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

挑战

如果你已经完成了O(n)时间复杂度的编程,请再试试 O(n log n)时间复杂度。

标签 Expand  

相关题目 Expand 


分析:数组的题目一般都是前缀和阿(对应O(nlgn)的解法),或者就是两根指针同方向走啊,或者反方向走啊什么的。。。

代码:

class Solution {public:    /**     * @param nums: a vector of integers     * @param s: an integer     * @return: an integer representing the minimum size of subarray     */    int minimumSize(vector<int> &nums, int s) {        // write your code here        int ret = INT_MAX;        int start = 0;        int end = 0;        int sum = 0;        while(end<nums.size())        {            sum+=nums[end];            if(sum>=s)            {                ret = min(ret,end-start+1);                while(sum>=s&&start<=end)                {                    ret = min(ret,end-start+1);                    sum-=nums[start];                    start++;                }            }            end++;        }        if(ret == INT_MAX)            ret = -1;        return ret;    }};


1 0
原创粉丝点击