題目: 給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。 設計一個演算法來計算你所能獲取的最大利潤。你可以儘可能地完成更多的交易(多次買賣一支股票)。 註意:你不能同時參與多筆交易(你必須在再次購買前出售掉之前的股票)。 示例 1: 輸入: [7,1,5,3,6,4] 輸出: 7 解釋 ...
題目:
給定一個數組,它的第 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。
題目分析:
簡單題,不必贅述。
只強調筆者的思路要點:
首先需要一個標誌記錄當前股票的狀態(下麵代碼中的flag,0代表空倉,1代表滿倉)
其次需要記錄買入價格和賣出價格(下麵代碼中的buy和sale)
最後賣出後算出所得利潤(下麵代碼中的profit)
註意:防止一天交易兩次(代碼中的continue語句),最後一天要特殊處理。
解答代碼:
Python:
1 class Solution: 2 def maxProfit(self, prices): 3 """ 4 :type prices: List[int] 5 :rtype: int 6 """ 7 flag=0 8 buy=0 9 sale=0 10 profit=0 11 for i in range(0,len(prices)-1): 12 if flag==0 and prices[i]<prices[i+1]: 13 buy=prices[i] 14 flag=1 15 continue 16 if flag==1 and prices[i]>prices[i+1]: 17 sale=prices[i] 18 flag=0 19 profit=profit+(sale-buy) 20 if flag==1: 21 sale=prices[len(prices)-1] 22 profit=profit+(sale-buy) 23 24 return profit
C語言解答與Python解答代碼大致相同,只是語法的區別,此處省略!