您的位置:首页 > 其它

lintcode-406-和大于S的最小子数组

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

您在真实的面试中是否遇到过这个题?

Yes

样例

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

挑战

如果你已经完成了O(n)时间复杂度的编程,请再试试 O(n log n)时间复杂度。
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
if(nums.empty())
return -1;

int result=INT_MAX,begin=0,end=0,size=nums.size(),sum=0;

while(end<size){
sum+=nums[end];
while(sum>=s&&end>=begin){
if(result>end-begin+1)
result=end-begin+1;
sum-=nums[begin];
++begin;
}
++end;
}
return result==INT_MAX?-1:result;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: