121.買賣股票的最佳時(shí)機(jī)
算法一(自己):
def maxProfit(self, prices: List[int]) -> int:
if not prices:
return 0
mini = prices[0] #設(shè)置一個(gè)最小的數(shù)
profit = 0 #初始利潤設(shè)為0
for i in range(1,len(prices)): #從第二個(gè)數(shù)開始循環(huán)
if mini > prices[i]: #如果mini非最小數(shù)哈打,則更新mini
mini = prices[i]
if prices[i] - mini > profit: #兩數(shù)相減,大于初始利潤讯壶,則更新利潤
profit = prices[i] - mini
return profit
算法二:
def maxProfit(self, prices: List[int]) -> int:
if len(prices) < 2:
return 0
profit = 0
mini = prices[0]
for i in prices:
mini = min(i, mini)
profit = max(i - mini, profit)
return profit
分析:該方法與我自己的相似料仗,但是運(yùn)用了幾個(gè)比較函數(shù),使代碼變得更加簡潔了伏蚊。
122.買賣股票的最佳時(shí)機(jī)II
算法:
def maxProfit(self, prices: List[int]) -> int:
profit = 0
for i in range(len(prices)):
if prices[i] > prices[i-1]:
profit += prices[i] - prices[i-1]
return profit
分析:大佬的算法立轧,邏輯超強(qiáng)。
比如[1,3,5,2,6,1,3]
profit=(3-1)+(5-3)+(6-2)+(3-1)
125.驗(yàn)證回文串
算法:
def isPalindrome(self, s: str) -> bool:
s = ''.join(filter(str.isalnum, s)).lower()
return s == s[::-1]
分析:filter函數(shù)前面講過躏吊。isalnum() 方法檢測字符串是否由字母和數(shù)字組成氛改,并返回True或者False。
136.只出現(xiàn)一次的數(shù)字
算法:
def singleNumber(self, nums: List[int]) -> int:
a = 0
for num in nums:
a = a ^ num
return a
分析:算法使用了Python中的異或運(yùn)算比伏,異或運(yùn)算將數(shù)字看做二進(jìn)制進(jìn)行運(yùn)算胜卤。
例如:
a = 60(二進(jìn)制為0011 1100 )
b = 13(二進(jìn)制為0000 1101)
異或要求對應(yīng)的二進(jìn)位相異時(shí)為1,相同時(shí)為0赁项。
a^b結(jié)果為0011 0001
且異或滿足交換律a ^ b ^ c <=> a ^ c ^ b