码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-08-11 21:33:19      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:lintcode   面试   

给定一个由 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;
    }
};


版权声明:本文为博主原创文章,未经博主允许不得转载。

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

标签:lintcode   面试   

原文地址:http://blog.csdn.net/wangyuquanliuli/article/details/47426395

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!