假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?
最初写法,差的前缀和的最大值
int maxProfit(int* prices, int pricesSize){
if(pricesSize<2){
return 0;
}
int max,sum;
max=sum=prices[1]-prices[0];
for(int i=2;i<pricesSize;i++){
sum=(sum>0)?(prices[i]-prices[i-1]+sum):(prices[i]-prices[i-1]);
if(sum>max){
max=sum;
}
}
return (max>0)?max:0;//不要负数
}
动态规划,更优
int maxProfit(int* prices, int pricesSize){
if(pricesSize<2){
return 0;
}
int min,preli,curli;
min=prices[0];
preli=0;
for(int i=1;i<pricesSize;i++){
curli=preli>(prices[i]-min)?preli:(prices[i]-min);
preli=curli;
min=(prices[i]>min)?min:prices[i];
}
return curli;
}
理解;
第i日最大利润
li[i]=max(li[i-1],prices[i]-min(prince[0~i-1]))
初始化
li[0]=0
优化
min=min(price[0~i-1])
curli=max(preli,prices[i]-min)
初始化
min=prices[0]
preli=0
链接:https://leetcode-cn.com/problems/gu-piao-de-zui-da-li-run-lcof/