LeetCode 121. 買賣股票的最佳時(shí)機(jī)

題目

給定一個(gè)數(shù)組 prices ,它的第 i 個(gè)元素 prices[i] 表示一支給定股票第 i 天的價(jià)格。你只能選擇某一天買入這只股票,并選擇在未來的某一個(gè)不同的日子賣出該股票。設(shè)計(jì)一個(gè)算法來計(jì)算你所能獲取的最大利潤。返回你可以從這筆交易中獲取的最大利潤。如果你不能獲取任何利潤,返回 0 。

例:
輸入:[7,1,5,3,6,4]
輸出:5
解釋:在第 2 天(股票價(jià)格 = 1)的時(shí)候買入,在第 5 天(股票價(jià)格 = 6)的時(shí)候賣出,最大利潤 = 6-1 = 5 。
注意利潤不能是 7-1 = 6, 因?yàn)橘u出價(jià)格需要大于買入價(jià)格;同時(shí),你不能在買入前賣出股票。

方法:暴力解法

計(jì)算每天若要選擇賣出的話的最大利潤,通過兩個(gè)循環(huán)實(shí)現(xiàn)

class Solution(object):
    def maxProfit(self, prices):
        result = 0
        for i in range(1, len(prices)):
            for j in range(i):
                if prices[i] - prices[j] > result:
                    result = prices[i] - prices[j]
        return result

超出時(shí)間限制

方法:貪心算法
  • result 表示當(dāng)前利潤的最大值,low 表示當(dāng)前遇到的價(jià)格最小值
  • 通過循環(huán)實(shí)現(xiàn)對兩個(gè)參數(shù)的記錄
class Solution(object):
    def maxProfit(self, prices):
        result = 0
        low = float('inf')
        for i in range(len(prices)):
            low = min(low, prices[i])
            result = max(result, prices[i] - low)
        return result
方法:動(dòng)態(tài)規(guī)劃
  • dp[i][0] 表示第 i 天持有股票所擁有的最多現(xiàn)金(負(fù)數(shù)),dp[i][1] 表示第 i 天不持有股票所擁有的最多現(xiàn)金
  • 初始化。dp[0][0] 即第一天持有股票所擁有的最多現(xiàn)金,即第一天買入股票,那么此時(shí)應(yīng)賦值 -prices[0];dp[0][1]即第一天不持有股票所擁有的最多現(xiàn)金,即第一天不買入股票,那么此時(shí)賦值 0
  • 循環(huán)記錄。dp[i][0] 有兩種可能性:第 i-1 天就持有股票 dp[i-1][0],第 i-1 天并未持有股票但在第 i 天買入股票 -prices[i],取這兩種可能的較大值。dp[i][1] 有兩種可能:第 i-1 天就未持有股票 dp[i-1][1],第 i-1 天持有股票但在第 i 天賣出股票 prices[i] + dp[i-1][0],取這兩種可能的較大值
class Solution(object):
    def maxProfit(self, prices):
        dp = [[0] * 2 for row in range(len(prices))]
        dp[0][0], dp[0][1] = -prices[0], 0
        for i in range(1, len(prices)):
            dp[i][0] = max(dp[i-1][0], -prices[i])
            dp[i][1] = max(dp[i-1][1], prices[i] + dp[i-1][0])
        return dp[-1][1]
參考

代碼相關(guān):https://programmercarl.com/0121.%E4%B9%B0%E5%8D%96%E8%82%A1%E7%A5%A8%E7%9A%84%E6%9C%80%E4%BD%B3%E6%97%B6%E6%9C%BA.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容