基本思路
每天賣出股票的最優價格 == 之前最低價格和當天價格的差值
if (prices[i]-prices[i-1]+dp[i-1]<0) //說明當日的價格比之前的最低價格還要低,所以改成當日買入並且使dp[i] = o
dp[i] = 0;
else
dp[i] = prices[i]-prices[i-1]+dp[i-1];
dp[I]代表了每日賣出股票的局部優解,最優解並不一定要在當天賣出。
使用max來記錄最優解
int maxProfit(int* prices, int pricesSize){
int *dp = (int *)calloc(pricesSize, sizeof(int));
int max = 0;
for (int i = 1; i < pricesSize; i++)
{
if (prices[i] - prices[i-1] + dp[i-1] <= 0)
dp[i] = 0;
else
dp[i] = prices[i] - prices[i-1] + dp[i-1];
max = max>dp[i]?max:dp[i];
}
return max;
}
int maxProfit(int* prices, int pricesSize){
int i;
int min, max;
min = *prices;
max = 0;
if (pricesSize < 2)
return 0;
for (i = 0; i < pricesSize; i++)
{
if (min > *(prices+i))
min = *(prices+i);
if (*(prices+i) - min > max)
max = *(prices+i) - min;
}
return max;
}