【LeetCode】貪心算法--買賣股票的最佳時機 II(122)

1、寫在前面面試

爲何要在LeetCode刷題?你們都知道不論是校招仍是社招算法題是必考題,而這一部分恰巧是大多數人的短板,因此刷題首先是爲了提升自身的編程能力,可以在算法面試中脫穎而出,拿到滿意的offer。本身是打算考研的,計算機考研數據結構也是必考題,因此刷題的第二個緣由就是爲了鞏固本身的數據結構知識。算法

應該如何刷題呢?這兩個月本身是順序刷題的,可是總結的時候發現知識點太零散,前二十題有棧,鏈表,數組等等,本身總結的時候沒有造成一個完整的體系,也沒有清晰的分類,這不是本身想要的,因此本身後期刷題將採用專題的方式,好比數組,鏈表,二叉樹等等。編程

那麼第一個專題就是貪心算法。前20題連接【LeetCode】彙總貼(NO.1-20)數組

本身建了一個LeetCode刷題羣,交流本身的刷題心得,如今尚未到達預約的人數,感興趣的小夥伴能夠參加哦,我的微信:wxb950917。微信

爲面試而生,期待你的加入。
2、什麼是貪心算法數據結構

貪心算法在LeetCode共有41個題目,以中等難度居多。那麼什麼是貪心算法呢?機器學習

貪心算法(又稱貪婪算法)是指,在對問題求解時,老是作出在當前看來是最好的選擇。也就是說,不從總體最優上加以考慮,他所作出的是在某種意義上的局部最優解。學習

貪心算法每一步必須知足一下條件:設計

  一、可行的:即它必須知足問題的約束。3d

  二、局部最優:他是當前步驟中全部可行選擇中最佳的局部選擇。

  三、不可取消:即選擇一旦作出,在算法的後面步驟就不可改變了。

學習貪心算法的時候能夠結合動態規劃一塊兒來學習,二者仍是很類似的。

3、今日題目

買賣股票的最佳時機 II(122)

給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。

設計一個算法來計算你所能獲取的最大利潤。你能夠儘量地完成更多的交易(屢次買賣一支股票)。

注意:你不能同時參與多筆交易(你必須在再次購買前出售掉以前的股票)。

示例 1:
輸入: [7,1,5,3,6,4]
輸出: 7
解釋: 在第 2 天(股票價格 = 1)的時候買入,在第 3 天(股票價格 = 5)的時候賣出, 這筆交易所能得到利潤 = 5-1 = 4 。

隨後,在第 4 天(股票價格 = 3)的時候買入,在第 5 天(股票價格 = 6)的時候賣出, 這筆交易所能得到利潤 = 6-3 = 3 。

示例 2:
輸入: [1,2,3,4,5]
輸出: 4
解釋: 在第 1 天(股票價格 = 1)的時候買入,在第 5 天 (股票價格 = 5)的時候賣出, 這筆交易所能得到利潤 = 5-1 = 4 。

注意你不能在第 1 天和第 2 天接連購買股票,以後再將它們賣出。
 由於這樣屬於同時參與了多筆交易,你必須在再次購買前出售掉以前的股票。

示例 3:
輸入: [7,6,4,3,1]
輸出: 0
解釋: 在這種狀況下, 沒有交易完成, 因此最大利潤爲 0。

4、題目分析

貪心算法,老是作出在當前看來是最好的選擇,不從總體最優上加以考慮,也就是說,只關心當前最優解,按照貪心策略,不關心之後,咱們只關心當前利益。第0天買入,花費prices[0],第一天賣出,獲得prices[1],那麼咱們的收穫就是profit = prices[1] - prices[0],那麼有兩種狀況

(1)當profit > 0 時,趕忙買入賣出,能賺一筆是一筆。

(2)當profit <= 0 時,再買入賣出的話,那就是傻了,虧錢。

以此方式類推下去,即得最大利潤。

5、代碼實現

class Solution:

def maxProfit(self, prices):
    """
    :type prices: List[int]
    :rtype: int
    """
    profit = 0
    temp=0
    for i in range(1,len(prices)):
        temp=prices[i] - prices[i-1]
        if temp>0:
            profit+=temp
    return profit

【推薦閱讀】

【Python爬蟲】初識爬蟲(1)

用Python來一場人工造雪

機器學習實戰--住房月租金預測(1)

Python之禪

相關文章
相關標籤/搜索