LeetCode騰訊精選練習50——第十天
阿新 • • 發佈:2021-01-22
技術標籤:LeetCode二叉樹leetcodepython
題目121:買賣股票的最佳時機
給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。
如果你最多隻允許完成一筆交易(即買入和賣出一支股票一次),設計一個演算法來計算你所能獲取的最大利潤。
注意:你不能在買入股票前賣出股票。
題解:
class Solution:
def maxProfit(self, prices: List[int]) -> int:
if len(prices) <= 1:
return 0
min_in = prices[ 0]
max_out = 0
for i in range(1,len(prices)):
min_in = min(prices[i], min_in) # 從0到i的最小值
max_out = max(max_out, prices[i] - min_in) # 若輸入更新,則i-min_input=0
return max_out
執行結果:
題目122:買賣股票的最佳時機 Ⅱ
給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。
設計一個演算法來計算你所能獲取的最大利潤。你可以儘可能地完成更多的交易(多次買賣一支股票)。
題解:
class Solution:
def maxProfit(self, prices: List[int]) -> int:
res = 0
for i in range(1, len(prices)):
if prices[i-1] < prices[i]:
res += prices[i] - prices[i-1]
return res
執行結果:
題目124:二叉樹中的最大路徑和
路徑 被定義為一條從樹中任意節點出發,沿父節點-子節點連線,達到任意節點的序列。該路徑 至少包含一個 節點,且不一定經過根節點。
給你一個二叉樹的根節點 root ,返回其 最大路徑和 。
題解:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def maxPathSum(self, root: TreeNode) -> int:
self.max_sum = -sys.maxsize - 1
def scan(root):
if root is None:
return -sys.maxsize - 1
left = scan(root.left)
right = scan(root.right)
self.max_sum = max(self.max_sum, root.val + left + right, left, right) # 情況1,5,6,不累加直接放變數裡暫存
return max(root.val, root.val + left, root.val + right) # 情況2,3,4 ,累加需要遞迴
new_max = scan(root)
return max(self.max_sum, new_max) # 兩類情況再求最大
執行結果: