【刷题日记】1161. 最大层内元素和

简介: 【刷题日记】1161. 最大层内元素和

一、题目描述:

image.png

题目描述文字较少,看一眼大概知道是要说什么,但是我们需要采取什么样的方式来处理的,咱们继续往下看

二、这道题考察了什么思想?你的思路是什么?

  • 题目给予我们一个基本概念,二叉树的层次,从根节点开始是第 1 层,逐个往下递增 1
  • 题目要求我们找到节点和最大的那一层,并返回层数

分析

我们可以知道,按照题目意思,其实已经非常明确了,需要我们计算每一层的节点和,再逐层去比较,返回节点和最大的那一层的层级数

看到题目的描述,第一反应是会先到二叉树的层序遍历来进行处理,因为确实是有点条件反射了

当然,对于能够使用广度优先算法 BFS 的地方,自然也是可以是深度优先算法 DFS 的方式的,自然,反过来也是成立的,只不过是这两种方式扩展的方向不同,一个是深度优先,一个是广度优先,目的只有一个,那就是遍历完全整棵树

那么我们来模拟一下示例:

image.png

根据简图,我们可以清晰的看到每一层是如何入队列,以及 maxSum 和 resLevel 的更新情况,题目相对比较好理解,也比较简单,这演示的是层序遍历,当然如果想用深度优先算法来实现的话也是可以的,动起手来吧

三、编码

根据上述逻辑和分析,我们就可以翻译成如下代码

此处需要注意我们使用的是二叉树的层序遍历方式,我们需要计算每一层的最大值,并且挨个比较,分为如下几步:

  • 每一层节点入队列
  • 遍历队列里节点的时候,计算本层节点的数据和
  • 判断本层数据和与 maxSum 比较,若比他大则取而代之
  • 最终返回 maxSum 对应的层级位置

编码如下:

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func maxLevelSum(root *TreeNode) int {
// 使用层序遍历的方式更加容易让人想到
    // 初始化结果最大值的层为 1
    resLevel, maxSum := 1, root.Val
    que := []*TreeNode{root}
    for level := 1; len(que) > 0; level++ {
        tmp := que
        que = nil
        // 开始遍历每一层的节点
        tmpSum := 0
        for _,node := range tmp {
            tmpSum += node.Val
            // 开始将当前节点的子节点加入到 que 中
            if node.Left != nil {
                que = append(que, node.Left)
            }
            if node.Right != nil {
                que = append(que, node.Right)
            }
        }
        // 开始判断当前层的总和与 maxSum 谁大
        if tmpSum > maxSum {
            resLevel = level
            maxSum = tmpSum
        }
    }
    return resLevel
}

四、总结:

image.png

本次的解法,使用的是二叉树的层序遍历,BFS,时间复杂度为 O(n) ,因为我们遍历了二叉树的所有节点,这个 n 表示二叉树的节点

空间复杂度也是 O(n) ,因为咱们占用的空间消耗最差的情况是属于 O(n) 级别的

原题地址:1161. 最大层内元素和

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

image.png

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~

相关文章
|
弹性计算 Ubuntu Linux
幻兽帕鲁服务器清档教程
介绍了Linux(ubuntu)和Windows平台下清除服务器存档的教程。适用于计算巢部署和已有ECS部署。
6621 0
|
机器学习/深度学习 数据采集 人工智能
Machine Learning机器学习之贝叶斯网络(BayesianNetwork)
Machine Learning机器学习之贝叶斯网络(BayesianNetwork)
|
机器学习/深度学习 算法 测试技术
低照度增强算法(图像增强+目标检测+代码)
低照度增强算法(图像增强+目标检测+代码)
|
11月前
|
Ubuntu Linux Windows
Ventoy 是一款开源的多系统启动U盘工具
Ventoy是一款开源多系统启动U盘工具,支持Legacy BIOS和UEFI模式,可直接启动多个ISO文件(无需解压),兼容Windows、Linux等系统。只需下载安装Ventoy到U盘,拷贝ISO文件即可实现多系统启动。官网:https://www.ventoy.net,GitHub:https://github.com/ventoy/Ventoy。制作需8GB以上U盘及Win7以上系统。
1948 154
|
11月前
|
JavaScript 前端开发 开发者
flat、flatmap与map的用法区别
本文介绍了 JavaScript 数组方法 `flat()`、`flatMap()` 和 `map()` 的用法及区别。`flat()` 可按指定深度递归展平数组,参数为深度,默认一层;`flatMap()` 结合了 `map()` 和 `flat()` 功能,返回一维数组,长度可能不同于原数组;而 `map()` 返回与原数组长度一致的新数组。通过多个代码示例展示了三者的功能和差异,帮助开发者更好地理解和使用这些方法。
1286 0
|
数据建模 网络安全
阿里云申请SSL证书价格多少钱一年?2025免费版和付费版收费标准
阿里云SSL证书提供免费和付费版本,适合不同需求。付费证书品牌涵盖WoSign、DigiCert、GlobalSign等,类型包括DV(域名验证)、OV(企业验证)和EV(扩展验证),价格从238元/年起,通配符和多域名证书价格更高。新用户享5折起优惠,全系列75折起。免费版由Digicert提供,仅支持单域名,有效期3个月,特殊域名可能无法申请。建议正式环境选用付费证书以确保稳定性与安全性。详情及申请流程可参考阿里云官方文档或控制台操作指引。
8801 0
|
关系型数据库 MySQL Java
【Docker最新版教程】一文带你快速入门Docker常见用法,实现容器编排和自动化部署上线项目
Docker快速入门到项目部署,MySQL部署+Nginx部署+docker自定义镜像+docker网络+DockerCompose项目实战一文搞定!
2172 10
|
存储 数据采集 JSON
Open NotebookLM,一键PDF/URL转播客!
本文带你来了解,结合不同的开源模型,例如Qwen2.5-72B-Instruct, CosyVoice-300M)等,将PDF文件(比如论文paper),或者网页URL内容,转换成为有趣的播客😊。
|
前端开发 JavaScript Java
java实现文件对比
基于java实现类似于svn的文件对比功能及效果,该对比适用于html,js,css,text等
java实现文件对比
|
存储 监控 视频直播
对象存储OSS产品概念
对象存储OSS产品概念
364 4