leetcode python刷题记录(十二)(121~130)

leetcode python刷题记录(十二)(121~130)

121. 买卖股票的最佳时机

leetcode python刷题记录(十二)(121~130)_第1张图片

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        min_num=float('inf')
        profit=0

        for num in prices:
            min_num=min(min_num,num)
            profit=max(profit,num-min_num)

        return profit

122. 买卖股票的最佳时机 II

leetcode python刷题记录(十二)(121~130)_第2张图片
贪心:

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        profit=0

        for i in range(1,len(prices)):
            temp=prices[i]-prices[i-1]
            if temp > 0:
                profit=profit+temp

        return profit

123. 买卖股票的最佳时机 III

leetcode python刷题记录(十二)(121~130)_第3张图片
leetcode python刷题记录(十二)(121~130)_第4张图片

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        if len(prices)==0:
            return 0
        
        # dp[i][j]中 i表示第i天,j为 [0 - 4] 五个状态,dp[i][j]表示第i天状态j所剩最大现金。
        dp=[[0]*5 for _ in range(len(prices))]

        dp[0][1] = -prices[0]
        dp[0][3] = -prices[0]

        for i in range(1,len(prices)):
            dp[i][0]=dp[i-1][0] # 没有操作
            dp[i][1]=max(dp[i-1][1],dp[i-1][0]-prices[i]) # 第一次持有股票
            dp[i][2]=max(dp[i-1][2],dp[i-1][1]+prices[i]) # 第一次不持有股票
            dp[i][3]=max(dp[i-1][3],dp[i-1][2]-prices[i]) # 第二次持有股票
            dp[i][4]=max(dp[i-1][4],dp[i-1][3]+prices[i]) # 第二次不持有股票

        return dp[len(prices) - 1][4]

124. 二叉树中的最大路径和

leetcode python刷题记录(十二)(121~130)_第5张图片

class Solution:
    def maxPathSum(self, root: Optional[TreeNode]) -> int:

        res=-inf

        def dfs(node):
            if node is None:
                return 0
            
            left=dfs(node.left)
            right=dfs(node.right)

            nonlocal res

            if left+right+node.val>res:
                res=left+right+node.val

            # 是自底向上求的,对于某节点来说,通过这个点的路径最大值为left+right+node.val,存到res里
            # 而考虑retuan的话,只能选择当前节点的左右支中相对大的一个
            # 该节点的左右支都选的话,整体就不是一条“路径”了,所以只能选较大的ax(left,right)+node用于return
            return max(0,max(left,right)+node.val)
        
        dfs(root)
        return res

你可能感兴趣的:(leetcode,leetcode,算法,职场和发展)