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