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

題目描述:

給定一個(gè)數(shù)組,它的第 i 個(gè)元素是一支給定股票第 i 天的價(jià)格。

如果你最多只允許完成一筆交易(即買(mǎi)入和賣(mài)出一支股票),設(shè)計(jì)一個(gè)算法來(lái)計(jì)算你所能獲取的最大利潤(rùn)。

注意你不能在買(mǎi)入股票前賣(mài)出股票。

示例 1:

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

輸入: [7,6,4,3,1]
輸出: 0
解釋: 在這種情況下, 沒(méi)有交易完成, 所以最大利潤(rùn)為 0。


題目分析:

看到這道題,我想到的就先寫(xiě)條件嘛,寫(xiě)多了題就有感覺(jué)了,他的測(cè)試集里面肯定有空的,所以我最開(kāi)始就判斷,如果長(zhǎng)度為空,那么就返回0,然后我想到的是另外兩個(gè)條件,如果它的測(cè)試集里面是一個(gè)順序的list,或者是一個(gè)反序的list怎么辦,然后我就又判斷,如果它給的測(cè)試集與升序或降序的順序相同,那就return 最后一個(gè)減第一個(gè),或者是return 0,然后才是計(jì)算部分,我先創(chuàng)建一個(gè)名叫big_list的列表,然后讓每個(gè)在后面的數(shù)都與在它前面的數(shù)相減,然后存入big_list中,然后直接return max(big_list),我的這個(gè)思路其實(shí)很暴力法...唉,還是太蠢了,貼一下代碼吧,不過(guò)這個(gè)代碼還是太慢了,超出了時(shí)間限制。


class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        le = len(prices)
        if le == 0:
            return 0
        if prices == sorted(prices, reverse=True):
            return 0
        if prices == sorted(prices, reverse=False):
            return prices[le-1]-prices[0]
        big_list = []
        for i in range(le-1,-1,-1):
            j = 0
            while i > j:
                big_list.append(prices[i]-prices[j])
                j += 1
        return max(big_list)

然后我們?cè)倏纯磩e人的代碼吧,很簡(jiǎn)潔,感覺(jué)寫(xiě)算法還是要深思熟慮一下,然后聯(lián)系一下實(shí)際,不要自己想象著寫(xiě),這樣寫(xiě)不出太好的算法,
大家普遍運(yùn)用的都是這個(gè)思路,就是說(shuō)我們?cè)谧畹吞庂I(mǎi)入,然后在最高處賣(mài)出,得出的自然就是最大的利潤(rùn)。那么我們順著這個(gè)邏輯去寫(xiě)代碼,就很容易能寫(xiě)得出了。
這條代碼就是運(yùn)用這個(gè)思路,他剛開(kāi)始不知道哪個(gè)是最低的嘛,然后就規(guī)定說(shuō)測(cè)試集的第一個(gè)數(shù)就是最低的,然后利潤(rùn)初始化為0,然后走循環(huán),如果循環(huán)中有元素大于第一個(gè)數(shù),那就是說(shuō)有利潤(rùn)嘛,然后就把他們的差賦給利潤(rùn)嘛,然后如果這個(gè)差小于利潤(rùn),那么顯然,這個(gè)元素比之前我們定義的第一個(gè)數(shù)還要小,那就把這個(gè)元素當(dāng)作是最低的數(shù),然后一切推倒重來(lái),計(jì)算利潤(rùn)。。。大概思路就是這樣

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        if not prices:
            return 0
        low = prices[0]
        profit = 0
        for i in prices:
            if i - low > profit:
                profit = i - low
            if i < low:
                low = i
        return profit

唉....我好撈啊,又被吊錘了,提升自己的邏輯思維能力是很重要的。干巴爹(? ?_?)?

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

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

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