你现在是一个买卖青蛙的 huster。每天的青蛙价格不一样,prices[i]代表青蛙在第 i 天的价格,求只做一次交易(买入 1 只,卖出 1 只)能得到的最大收益(你必须先买了青蛙之后才能 卖青蛙)。
时间复杂度要求:O(n)
函数:int maxIncome(int prices[ ],int n)
解析:
#include <stdio.h>
#include <stdlib.h>
/*
假设第一天的价格最低,最后一天的价格最高, 分别从数组的头(i)尾(j)两端遍历,
满足i<j时,当有低于当前最低价格时,更新min,当有高于当前最高价时,更新max
最后得出最高利润
*/
int maxIncome(int price[],int n) //price[i]存放每天的价格,n表示天数
{
int max,min,i,j,profit;
max=price[n-1];
min=price[0];
i=0;j=n-1;profit=0;
while(i<j)
{
if(price[i+1]<price[i])
{
min=price[i+1];
}
if(price[j-1]>price[j])
{
max=price[j-1];
}
i++;
j--;
}
profit=max-min;
return profit;
}
int main() {
int price[1024],i,n,pro;
printf("请输入天数:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("请输入第%d天青蛙的价格:\n",i+1);
scanf("%d",&price[i]);
}
pro=maxIncome(price,n);
printf("最大利润:%d\n",pro);
return 0;
}