買賣股票的最佳時機

在這裏插入圖片描述

題目鏈接: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];
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章