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

来源:互联网 发布:慈溪行知职高地址全称 编辑:程序博客网 时间:2024/06/05 05:11

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

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

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

#ifndef C406_H#define C406_H#include<iostream>#include<vector>using namespace std;class Solution {public:    /*    * @param nums: an array 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        if (nums.empty())            return -1;        int num = INT_MAX;        int start = 0, end = 0;        int len = nums.size();        int sum = 0;        while (end < len)        {            sum += nums[end];            if (sum >= s)            {                num = minVal(num, end - start + 1);                while (sum >= s&&start <= end)                {                    num = minVal(num, end - start + 1);                    sum -= nums[start];                    start++;                }            }            end++;        }        return num == INT_MAX ? -1 : num;    }    int minVal(int a, int b)    {        return a < b ? a : b;    }};#endif
原创粉丝点击