最多后买宝石数目
题目描述
橱窗里有一排宝石,不同的宝石对应不同的价格,宝石的价格标记为 gems[i],0<=i<n, n = gems.length
宝石可同时出售0个或多个,如果同时出售多个,则要求出售的宝石编号连续;
例如客户最大购买宝石个数为m,购买的宝石编号必须为gems[i],gems[i+1]...gemsi+m-1
假设你当前拥有总面值为value的钱,请问最多能购买到多少个宝石,如无法购买宝石,则返回 0。
输入描述
第一行输入n,参数类型为int,取值范围:[0,10^6],表示橱窗中宝石的总数量。
之后n行分别表示从第0个到第n-1个宝石的价格,即gems[0]到gems[n-1]的价格,类型为int,取值范围:(0,1000]。
之后一行输入v,类型为int,取值范围:[0,10^9]表示你拥有的钱。
输出描述
输出int类型的返回值,表示最大可购买的宝石数量。
思路:顺序访问每个节点并计算之后能达到最大的总数
代码:
`#include
using namespace std;
int main(){
int n,count=0;
int gems[1000];
int allco;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>gems[i];
}
cin>>allco;
if(n==0)
{
cout<<0;
return 0;
}
for(int i=0;i<n;i++)
{
int nowcount=0;
int sum=0;
for(int j=i;j<n;j++)
{
sum+=gems[j];
if(sum<=allco)
{
nowcount++;
if(nowcount>count)
count=nowcount;
}
else
break;
}
}
cout<<count;
return 0;
}`
时间复杂度:O(n)
空间复杂度:O(n)