題目鏈接: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];
}