当前位置: 首页 > news >正文

徐州企业建站模板房天下搜房网官网

徐州企业建站模板,房天下搜房网官网,孝感网站制作,买网站服务器吗更新时间:2025-04-04 算法题解目录汇总:算法刷题记录——题解目录汇总技术博客总目录:计算机技术系列博客——目录页 优先整理热门100及面试150,不定期持续更新,欢迎关注! 124. 二叉树中的最大路径和 二…

更新时间:2025-04-04

  • 算法题解目录汇总:算法刷题记录——题解目录汇总
  • 技术博客总目录:计算机技术系列博客——目录页

优先整理热门100及面试150,不定期持续更新,欢迎关注!


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

二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。
路径和 是路径中各节点值的总和。
给你一个二叉树的根节点 root ,返回其 最大路径和

示例 1:

输入:root = [1,2,3]
输出:6

解释:最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6

示例 2:

输入:root = [-10,9,20,null,null,15,7]
输出:42

解释:最优路径是 15 -> 20 -> 7 ,路径和为 15 + 20 + 7 = 42

提示:

  • 树中节点数目范围是 [1, 3*10^4]
  • -1000 <= Node.val <= 1000

方法:递归法(后序遍历)

通过后序遍历计算每个节点的最大贡献值,并更新全局最大路径和。

  • 每个节点计算其左右子树的最大贡献值(若贡献为负则取0)。
  • 当前节点的总路径和为 自身值 + 左贡献 + 右贡献,更新全局最大值。
  • 返回当前节点能为父节点提供的单边最大贡献(即 自身值 + max(左贡献, 右贡献))。

代码实现(Java):

class Solution {private int maxSum = Integer.MIN_VALUE;public int maxPathSum(TreeNode root) {maxGain(root);return maxSum;}private int maxGain(TreeNode node) {if (node == null) return 0;// 计算左右子树的贡献值,负数则舍弃int leftGain = Math.max(maxGain(node.left), 0);int rightGain = Math.max(maxGain(node.right), 0);// 当前节点作为路径中间节点的总路径和int currentPathSum = node.val + leftGain + rightGain;maxSum = Math.max(maxSum, currentPathSum);// 返回当前节点能提供的最大单边贡献(给父节点使用)return node.val + Math.max(leftGain, rightGain);}
}

复杂度分析

  • 时间复杂度:O(n),所有节点仅访问一次。
  • 空间复杂度:O(h),递归栈深度(h为树的高度,最坏情况下为O(n))。

128. 最长连续序列

给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。

请你设计并实现时间复杂度为 O(n) 的算法解决此问题。

示例 1:

输入:nums = [100,4,200,1,3,2]
输出:4

解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。

示例 2:

输入:nums = [0,3,7,2,5,8,4,6,0,1]
输出:9

示例 3:

输入:nums = [1,0,1,2]
输出:3

提示:

  • 0 <= nums.length <= 10^5
  • -10^9 <= nums[i] <= 10^9

方法:哈希集合优化

利用哈希集合存储所有数字,仅对可能的连续序列起点进行检查,避免重复计算。

  1. 去重存储:将所有数字存入哈希集合,去除重复。
  2. 查找起点:遍历集合中的元素,若当前数字的前驱(num-1)不在集合中,则视为序列起点。
  3. 扩展序列:从起点开始逐个查找后续数字,计算当前连续序列长度。
  4. 更新结果:记录遍历过程中的最大序列长度。

代码:

class Solution {public int longestConsecutive(int[] nums) {Set<Integer> numSet = new HashSet<>();for (int num : nums) {numSet.add(num);}int maxLength = 0;for (int num : numSet) {// 只有当num是序列起点(前驱不存在)时才处理if (!numSet.contains(num - 1)) {int currentNum = num;int currentLength = 1;// 向后扩展序列while (numSet.contains(currentNum + 1)) {currentNum++;currentLength++;}maxLength = Math.max(maxLength, currentLength);}}return maxLength;}
}

复杂度分析:

  • 时间复杂度O(n)。每个元素最多被访问两次(加入集合和扩展序列)。
  • 空间复杂度O(n)。哈希集合存储所有元素。

声明

  1. 本文版权归 CSDN 用户 Allen Wurlitzer 所有,遵循CC-BY-SA协议发布,转载请注明出处。
  2. 本文题目来源 力扣-LeetCode ,著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
http://www.dtcms.com/a/513153.html

相关文章:

  • 华为OD机试C卷 - 会议室占用时间段 - 区间合并 - (Java C++ JavaScript Python)
  • 网站建设百度推广开户静态网页模板源代码
  • 共享虚拟主机做网站够用么如何从零开始做网站
  • 网站收录很好没排名南京奥美广告公司
  • 【学习系列】SAP RAP 14:行为定义-Save Options
  • STM32H743-ARM例程25-USB_VCP
  • A星寻路算法
  • 网站换代理天津市建设工程管理信息网
  • 项目开发手册-开发流程
  • 图像基础知识
  • 温岭自适应网站建设wordpress体育直播
  • Wincc报表自动导出Excel文件并以时间方式命名
  • 网站建设代运营方案给我一个网站图片
  • 网站价格明细表哪个网站做兼职有保障
  • 东莞市网站建设平台小型企业网站开发价格
  • 郑州市城乡建设局网站centos7 wordpress 安装
  • 做论坛网站需要哪些前置审批网站做那个效果好
  • 通过pandas merge_asof模糊匹配,快速计算财务同比指标
  • 重庆建网站要多少钱微慕WordPress小程序
  • 三合一网站搭建价格上海公司车辆怎么查询违章
  • 百度自己网站排名长春招聘网智联
  • leetcode 28 找出字符串中第一个匹配项的下标
  • 广州建设网站平台app与微网站的区别是什么意思
  • docker和docker compose离线安装-2-报错
  • 烟台放心的一站式网站建设佛山网站建设凤软
  • 网站调用网页怎么做国外那些网站做展厅比较好
  • 第2部分-线程的创建与管理
  • ORA-600 kokasgi1故障处理(sys被重命名)---惜分飞
  • 建电子商务网站需要多少钱攻略类型网站如何做产品营销
  • 曲阜官方建设局网站免费域名的选择方法