给定一个由 n 个整数组成的数组和一个正整数 s ,请找出该数组中满足其和 ≥ s 的最小长度子数组。如果无解,则返回 -1。
您在真实的面试中是否遇到过这个题?
Yes
样例
给定数组 [2,3,1,2,4,3]
和 s = 7
, 子数组 [4,3]
是该条件下的最小长度子数组。
挑战
标签
Expand
如果你已经完成了O(n)时间复杂度的编程,请再试试 O(n log n)时间复杂度。
相关题目 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;
}
};