lintcode刷題——和大於S的最小子陣列
lintcode刷題之和大於s的最小子陣列
原題如下:
給定一個由 n 個整陣列成的陣列和一個正整數 s ,請找出該陣列中滿足其和 ≥ s 的最小長度子陣列。如果無解,則返回 -1。
您在真實的面試中是否遇到過這個題? Yes 樣例給定陣列 [2,3,1,2,4,3]
和
s = 7
, 子陣列 [4,3]
是該條件下的最小長度子陣列。
1、用兩根指標,對陣列進行遍歷;
2、注意在判斷子陣列長度的時候,要用min來保證始終是最小的長度。
具體C++程式碼如下:
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 start=0,end=0;
int l=nums.size();
if(l==0)
return -1;
int sum=0;
int res=l+1;//res賦初值為陣列長度加1
while(end<l)
{
sum+=nums[end];
if(sum>=s)
{
res=min(res,end-start+1);//為了保證此時的字陣列長度是最小的
while(sum>=s&&start<=end)//當滿足子陣列之和大於等於s的時候,第二根指標發揮作用,從頭開始減去子數組裡面的元素
{
res=min(res,end-start+1);
sum-=nums[start];
start++;
}
}
end++;
}
if(res==l+1)
return -1;
else
return res;
}
};