给定一个由 n 个整数组成的数组和一个正整数 s ,请找出该数组中满足其和 ≥ s 的最小长度子数组。如果无解,则返回 -1。
您在真实的面试中是否遇到过这个题?给定数组 [2,3,1,2,4,3]
和 s
= 7
, 子数组 [4,3]
是该条件下的最小长度子数组。
如果你已经完成了O(n)时间复杂度的编程,请再试试 O(n log n)时间复杂度。
分析:数组的题目一般都是前缀和阿(对应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; } };
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/wangyuquanliuli/article/details/47426395