給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。python
設計一個算法來計算你所能獲取的最大利潤。你能夠儘量地完成更多的交易(屢次買賣一支股票)。算法
注意:你不能同時參與多筆交易(你必須在再次購買前出售掉以前的股票)。數組
示例 1:app
輸入: [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:code
輸入: [7,6,4,3,1] 輸出: 0 解釋: 在這種狀況下, 沒有交易完成, 因此最大利潤爲 0。
看示例就能發現他的計算規律若是次日比第一天鬼就賣否賊就不賣,而後差值相加,別被第二個示例影響到,你能夠想成 2-1+3-2+4-3+5-4=4也是同樣的
class Solution: def maxProfit(self, prices: List[int]) -> int: money = 0 for a in range(1,len(prices)): if prices[a] > prices[a-1]: money += (prices[a] - prices[a-1]) return money
給定一個二進制數組, 計算其中最大連續1的個數。leetcode
示例 1:get
輸入: [1,1,0,1,1,1] 輸出: 3 解釋: 開頭的兩位和最後的三位都是連續1,因此最大連續1的個數是 3.
注意:it
0
和1
。這題遇到問題是無法計數,我是經過把計數單獨定義一個次數,從左往右開始每碰到一個1計數加1,後續每了就把計數總和導入一個列表而且把計數歸零接着計數,以及最後計數完了再把計數導入下列表,這裏取最大值多導入幾個0沒有什麼影響,少導入就有問題了
class Solution: def findMaxConsecutiveOnes(self, nums: List[int]) -> int: count = 0 count_list = [] for a in nums: if a == 1: count += 1 else: count_list.append(count) count = 0 count_list.append(count) return max(count_list)
給定一個包含 0, 1, 2, ..., n
中 n 個數的序列,找出 0 .. n 中沒有出如今序列中的那個數。io
示例 1:
輸入: [3,0,1] 輸出: 2
示例 2:
輸入: [9,6,4,2,3,5,7,0,1] 輸出: 8
這題最大問題是運行時間,要簡化算法,那就乾脆換個思路不能死板的按照他說的來,若是一個值沒有在裏面那這個N序列的總和減去列表總和就是咱們要的那個值
class Solution: def missingNumber(self, nums: List[int]) -> int: nums_sum = 0 for a in range(len(nums)+1): nums_sum += a return nums_sum-sum(nums)
有更加好的思路,或者解題方法評論區留言謝謝