题目链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/
一开始的想法是:对于第i天,先找出前i-1天的最小值,然后相减,找出最大值就好了。
代码是:
int maxProfit(int* prices, int pricesSize) {
int *preMin = (int *)malloc(sizeof(int) * pricesSize);
preMin[0] = prices[0];
for(int i = 1; i < pricesSize; i++)
{
if(preMin[i-1] < prices[i])
preMin[i] = preMin[i-1];
else
preMin[i] = prices[i];
}
int max = 0;
for(int i = 1; i < pricesSize; i++)
{
if(prices[i] - preMin[i] > max)
max = prices[i] - preMin[i];
}
return max;
}
动态规划思路是(参考评论区。。)
对于第i天,要么选,要么不选。
前i天的最大收益 = max{前i-1天的最大收益,第i天的价格-前i-1天中的最小价格}
int maxProfit(int* prices, int pricesSize) {
int *preMin = (int *)malloc(sizeof(int) * pricesSize);
int *a = (int *)malloc(sizeof(int) * pricesSize);
preMin[0] = prices[0];
for(int i = 1; i < pricesSize; i++)
{
if(preMin[i-1] < prices[i])
preMin[i] = preMin[i-1];
else
preMin[i] = prices[i];
}
a[0] = 0;
for(int i = 1; i < pricesSize; i++)
{
if(prices[i] - preMin[i-1] > a[i-1])
a[i] = prices[i] - preMin[i-1];
else
a[i] = a[i-1];
}
return a[pricesSize-1];
}