和大於S的最小子陣列-LintCode
阿新 • • 發佈:2018-12-31
給定一個由 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