# 【leetcode】Best Time to Buy and Sell Stock I&II&III

230人阅读 评论(0)

DP

## Code

int maxProfit(int* prices, int pricesSize) {
if(!pricesSize) return 0;
int cur = 0;
int max = 0;
for(int i=1;i<pricesSize;++i){
cur += prices[i]-prices[i-1];
if(cur<0) cur = 0;
else if(cur>max) max = cur;
}
return max;
}

Greedy

## Code

int maxProfit(int* prices, int pricesSize) {
int sum = 0;
for(int i=1;i<pricesSize;++i){
sum += prices[i]-prices[i-1]>0?prices[i]-prices[i-1]:0;
}
return sum;
}

DP

## Code

//打印数组
void printArray(int *array,int len,char *note){
printf("%s\n",note);
for(int i=0;i<len;++i)
printf("%d ",array[i]);
printf("\n");
}

//简化操作
int *simple(int *prices,int *pricesSize){
int i=0;
for(int i=1;i<*pricesSize;++i)
prices[i-1] = prices[i]-prices[i-1];
--(*pricesSize);
//printArray(prices,*pricesSize,"After subtraction:");
bool flag = prices[0]>=0?true:false;
int count = 0;
for(int i=1;i<*pricesSize;++i){
if(flag){
if(prices[i]>=0)
prices[count]+=prices[i];
else{
flag = false;
prices[++count]=prices[i];
}
}else{
if(prices[i]<=0)
prices[count]+=prices[i];
else{
flag = true;
prices[++count]=prices[i];
}
}
}
*pricesSize = count+1;
return prices;
}

//获取当前段最大利润
int maxProfitNow(int *prices,int pricesSize){
int max = 0;
int cur = 0;
for(int i=0;i<pricesSize;++i){
cur += prices[i];
if(cur<0){
cur = 0;
}
max = max>cur?max:cur;
}

return max;
}

//获取最大利润
int maxProfit(int* prices, int pricesSize) {
if(pricesSize==1)   return 0;
//简化
int *simplestPrices = simple(prices,&pricesSize);
//printArray(simplestPrices,pricesSize,"After simple:");
//printf("\n");
int max = 0;

for(int i=0;i<pricesSize;++i){
if(simplestPrices[i]<0){
int tmp = maxProfitNow(simplestPrices,i) + \
maxProfitNow(simplestPrices+i+1,pricesSize-i-1);
max = tmp>max?tmp:max;
//printArray(prices,pricesSize,"Test");
//printf("%d %d--\n",i,tmp);
}
}
int tmp = maxProfitNow(simplestPrices,pricesSize);
max = tmp>max?tmp:max;

return max;
}

## Summary

You may figure it out,that these problems are as the same with “Maximum subarray”.
So in the third solution,I simplify the prices’ array.And use the DP to calculate the maximum result from some maximum subarray.

0
0

* 以上用户言论只代表其个人观点，不代表CSDN网站的观点或立场
个人资料
• 访问：43534次
• 积分：1295
• 等级：
• 排名：千里之外
• 原创：88篇
• 转载：5篇
• 译文：0篇
• 评论：4条
文章分类
阅读排行
评论排行
最新评论