1. 程式人生 > 其它 >LeetCode騰訊精選練習50——第十天

LeetCode騰訊精選練習50——第十天

技術標籤: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)  # 兩類情況再求最大

執行結果:
在這裡插入圖片描述