蓝桥杯10天

本文探讨了两种算法问题的解决方案:一是寻找买卖股票的最佳时机以获取最大利润,通过维护最小价格和当前最大利润实现;二是解决二叉树的最大路径和,采用递归方法和全局变量跟踪最大路径。这些算法展示了动态规划和递归在求解实际问题中的应用。
摘要由CSDN通过智能技术生成

一买卖股票的最佳时机

在这里插入图片描述

  • 我们要找到最大的差额就要记录从开始到现在获得最大的负收益min——然后将其减去
  • 这种方法只需要一次遍历,我们以局部和代整体和,整体最大和等于到目前为止的和减去目前为止的负收益和,倒退也成立,就可以找到局部max=整体和-局部负收益和
  • 这种方法在我那个最大子序和哪里讨论过,不懂的可以翻过去
class Solution(object):
    def maxProfit(self, prices):
        """
        :type prices: List[int]
        :rtype: int
        """
        while not prices:
            return 0
        min_,max_=prices[0],0
        for i in prices:
            min_=min(min_,i)
            max_=max(max_,i-min_)
        return max_

二买卖股票的最佳时机2

在这里插入图片描述

  • 简而言之,这道题更简单,就是把所有大于零的差都加起来,没有什么水平的一道题
class Solution(object):
    def maxProfit(self, prices):
        """
        :type prices: List[int]
        :rtype: int
        """
        total=0
        
        for i in range(len(prices)-1):                
            k=prices[i+1]-prices[i]
            if k>0:
                total+=k
        return total

三二叉树的最大路径和

在这里插入图片描述

  • 递归的思想,之前我们做过一道最大深度的问题

  • 既然递归,其形势必然为如下形式:
    if nor root: return
    l=maxroot(root.left)
    r=maxroot(root.right)
    return
    **

  • 但是我们如果要是递归下面一层的最大和,和由r+l+节点构成,那么我们返回的不是正确的路径,

  • 如果我们返回的是节点或max(l,r)

  • 那么返回到最后一层的时候返回的还要再加,因此,我们要在递归过程返回max(l,r)同时要确定一个全局变量,记录现节点对应的最大路径和左右节点对应最大的路径

  • 最终返回一个非return的记录量,即全局变量

  • 因此我们的结构俩个点:
    1.全局变量ans,负责更迭最大路径
    2.递归函数负责返回每次迭代的max(l,r,0)+val

class Solution:
    glb_max = -2147483648
    def maxPathSum(self, root: TreeNode) -> int:
        def maxPathSum2(root):
            if not root:
                return 0
            left=maxPathSum2(root.left)
            right=maxPathSum2(root.right)
            t=root.val
            self.glb_max=max(self.glb_max,t+left+right,t,t+left,t+right)
            return max(left+t,right+t,t)
        maxPathSum2(root)
        return self.glb_max
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值