leetcode-股票最大盈利值-動態規划


基本思路

每天賣出股票的最優價格 == 之前最低價格和當天價格的差值

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;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM