leetCode之買賣股票的最佳時機 II的貪心算法小問題

leetCode之買賣股票的最佳時機 II


給定一個數組,它的第 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。

思考過程:

  1. 直觀地處理數據,用正常的思維去處理數據,即如何實現利益最大化,但是在不同的數組下,利益的最大化的求解方式貌似都有所不同。(比較複雜了~)
  2. 想要將正常的思維轉換爲計算機語言,也同樣行不通(~)
  3. 對於交易一定是低賣高賣的,但,你能一元買進,明天是5元拋出的話,你是拋出還是不拋出,倘若你要拋出,但後天的價錢是10塊呢?
  4. 在思考過於複雜混亂,決定尋求幫助,網上也很多的解答,即爲」貪心算法「,有賺的我就買賣,-》百度關於貪心算法的解讀,但是我發現貪心算法雖然在這個題目裏是有一定道理的,在對於【1,2,3,4,5,6,7】這樣的情況下,對於網上一些解答,僅僅用貪心算法的話,我們第一天1塊買進,第二天有的賺,賣!第三天買,第四天又有賺,賣!最後並不是最優解答;在這裏插入圖片描述但也有人用折線圖來解釋,我覺得是很好的理解方式,這張圖不是很好,大家可以自己做一下圖。我們只要或得一條折線的低端和頂端便可以得到利潤,但對於紅線來說,我們寫貪心算法是可行的,但是並不能這樣去解釋,實際上此時的貪心算法,當天賣了依然可以買,便可以實現利潤最大化。