0x3f 第35天 电脑硬盘坏了 +二叉树直径,将有序数组转换为二叉搜索树
2026/6/10 15:13:48 网站建设 项目流程

九点多电脑还好好的,突然蓝屏了,自己修了半天无果,打电话叫修电脑的,头天晚上电动车还坏了,后面轮胎瘪了,简直就是祸不单行,先去把轮胎修了,然后等着修电脑的来,检查完说电脑硬盘用久了坏了,c盘d盘用不了了,还好大部分研究生期间数据都在e盘,把e盘取出来,换了台主机,基本上一台全新的电脑,啥都得安装。论文的原始数据集还在,但是之前搜的文献啥的,存在c盘的都没了,整理一下大概哪些没了,哪些还在

原始数据集还在
脱敏后的数据集没了得重跑
论文跑的结果没了得重跑
论文代码还在
相关文献没了
苍穹外卖配的所有环境idea,datagrip,mysql,redis,微信小程序开发端,javajdk,nginx前端
苍穹外卖代码还在
心态崩了
工位电脑的微信聊天记录没了

早上十点一直弄到下午五点,把外卖的环境全部有配置好了,还好能继续跑,今天真的心累,

写写算法休息一下吧,唉

长度最小的子数组x问题很大

乘积小于 K 的子数组

x最核心的问题想到了,差点细节
N皇后x整体思路没问题,小细节太久没做忘了
电话号码的字母组合x有点忘了
二叉树的锯齿形层序遍历x基本没大毛病
最长公共子序列x
二叉搜索树的最近公共祖先x

1.二叉树直径

1.核心思路,后序,假设手上拿着当前节点左最长链 ,右最长链,你如何计算最长直径?

ans = max(ans,l_max+r_max+2)

详解公式:以节点5为例,节点5 的左最长链l_max就是节点2 的最长链长度为2

右最长链r_max就是节点6的最长链长度为0

再加上2 ,2就是连接这仨节点的

2.注意ans是不断更新的,所以在使用ans前要nonlocal ans

3.求最长链就和最大深度一样的公式,return max(l_max,r_max)+1

4.注意起始条件

class Solution: def diameterOfBinaryTree(self, root: Optional[TreeNode]) -> int: ans = 0 def dfs(node): if node is None: return -1 lmax = dfs(node.left) rmax = dfs(node.right) nonlocal ans ans = max(ans,lmax+rmax+2) return max(lmax,rmax)+1 dfs(root) return ans

2、将有序数组转换为二叉搜索树

很明显了,变成一个二叉搜索树,那就递归,后序,然后每次处理中间的这个节点呗

为什么每次处理中间的,,这样就实现了二叉搜索树,nums[]已经排序好了,那每次处理nums中间的数字,那不就自动成为了二叉搜索树

边界条件:nums数组被//2 ÷干净了

递归就是left的就是nums[ :middle]

right就是nums[middle+1: ]

class Solution: def sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]: if nums ==[]: return None m = (len(nums))//2 left = self.sortedArrayToBST(nums[:m]) right = self.sortedArrayToBST(nums[m+1:]) return TreeNode(nums[m],left,right)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询