[各种面试题] 和大于S的最短子序列

和大于S的最短子序列

给定长度为n的整数数列:a0,a1,..,an-1,以及整数S。这个数列会有连续的子序列的整数总和大于S的,求这些数列中,最小的长度。

int findShortest3(vector<int>& num,int s)
{
	int sum=0;
	int start=0,end=0;
	int ans=num.size()+1;
	while(end<num.size())
	{
		if(sum<s)
			sum+=num[end];
		while(sum>=s)
		{
			ans=min(ans,end-start+1);
			sum-=num[start++];
		}
		end++;
	}
	return ans;
}


int findShortest2(vector<int>& num,int s)
{
	int n=num.size();
	queue<int> Q;
	int ans=n+1,qSum=0;
	for(int i=0;i<n;i++)
	{
		if(Q.empty()||qSum<s)
		{
			Q.push(num[i]);
			qSum+=num[i];
		}
		
		while(!Q.empty()&&qSum>=s)
		{
			ans=min(ans,(int)Q.size());
			qSum-=Q.front();
			Q.pop();
		}
	}
	return ans;
}


你可能感兴趣的:([各种面试题] 和大于S的最短子序列)