java算法day16
java算法day16
- 112 路径总和
- 404 左叶子之和
- 513 找树左下角的值
112 路径总和
题型判定为自顶向下类型,并且为路径和类型。
那就套模板。
自顶向下就是从上到下处理,那么就是前序遍历的思想。
class Solution {boolean res = false;public boolean hasPathSum(TreeNode root, int targetSum) {//特判if(root==null&&targetSum==0){return false;}//递归dfs(root,targetSum);return res;}//递归void dfs(TreeNode root,int targetSum){if(root==null){return;}//过程就是不断往下递归,成功的条件是叶子节点,targetSum-=root.val;if(root.left==null && root.right==null & targetSum==0){res = true;}else{//递归左右子树dfs(root.left,targetSum);dfs(root.right,targetSum);}}
}
本题得到的知识。
因为我是按模板做的,这个题我非常想在遇到结果的时候就立即返回。但是用模板做,那肯定会把全局走完。因此新知识就是怎么实现立即返回。
class Solution {public boolean hasPathSum(TreeNode root, int targetSum) {if(root==null&&targetSum==0){return false;}return dfs(root,targetSum);}boolean dfs(TreeNode root,int targetSum){if(root==null){return false;}targetSum-=root.val;if(root.left==null && root.right==null & targetSum==0){//完全可以直接返回return true;}//核心思想在理解这里return dfs(root.left,targetSum) || dfs(root.right,targetSum);}
}
通过这个题,我对递归的理解又更近了一步,更新我的想法。
return dfs(root.left,targetSum) || dfs(root.right,targetSum);
这里的正确想法是,递归左右子树,实际上是递归到最左底层后,往上回溯一层,然后才是去递归右子树。所以根据短路操作,碰到返回true,那么反馈给上层,上层得到这个true,就会把还没递归的右子树给短路。实现了建制。要是按我之前的做法,回溯的过程,每个右子树都是会去递归的。在某些大型树的场景就效率低了。
404 左叶子之和
这题就两个难点,左叶子点怎么定义。如果你对什么是左叶子点很清楚,那这个题就很容易。
ps:千万别层序遍历去做,层序遍历根本判别不了叶子节点是左叶子节点还是右叶子节点
1、左叶子点:某点的左孩子节点,其左孩子节点的左右孩子都为null,那么这个节点就是左叶子点。
2、在递归的时候很容易空指针,如何解决?
用短路操作把容易空指针的提前断掉。
先序遍历的思想
class Solution {int sum = 0;public int sumOfLeftLeaves(TreeNode root) {dfs(root);return sum;}void dfs(TreeNode root){if(root==null){return ;}//这里就是我的短路操作,左叶子节点肯定不是往右走的,所以只用判左边是否为空。如果左边都为空了,那么结果不可能在那边。所以就不用执行后序的操作。if(root.left!=null&&root.left.left==null && root.left.right==null){sum+=root.left.val;}dfs(root.left);dfs(root.right);}
}
513 找树左下角的值
树左下角的值,题目给的定义就是,最后一层,最左的节点。
所以我当时就立马想到了层序遍历的做法,我在迭代每一层的元素的时候,每次把每一层的第一个元素的值存下来还是很容易的。因此马上做了出来。
class Solution {public int findBottomLeftValue(TreeNode root) {Deque<TreeNode> que = new ArrayDeque<>();que.offerLast(root);int res = 0;while(!que.isEmpty()){int size = que.size();//每次扩展的时候,只存第一个扩展节点的值,全部处理完,结果就是这个for(int i = 0;i<size;i++){TreeNode temp = que.pollFirst();//关键就在这,每层处理一下第一个节点。if(i==0){res = temp.val;}if(temp.left!=null){que.offerLast(temp.left);}if(temp.right!=null){que.offerLast(temp.right);}}}return res;}
}
我提交之后发现,效率可以说非常的低。
递归解法:
要点:
1、实际上转化成了找深度最深的节点。
2、由于要保证最左,那递归的时候肯定优先递归左边,所以可以用先序遍历。
过程中的难点:
1、我在过程中老是在想一找到就立刻返回。实际上这是不太现实的。因为路没走完,你根本不可能知道哪个节点才是最深的。因此这个过程应该是不断的寻找最深节点,一旦找到更深的节点,那就应该把该点的值存下来。
2、起点深度怎么定其实无所谓的,最重要的是往下迭代深度的过程。所以一开始设置maxDepth=-1就行了,result=0。那么起点就一定要把maxDepth覆盖。
class Solution {int maxDepth = -1;int result = 0;public int findBottomLeftValue(TreeNode root) {dfs(root,0);return result;}void dfs(TreeNode node,int depth){if(node==null){return ;}//我一开始从0相当于先走一步了,所以都是往下递归才+1.if(depth>maxDepth){maxDepth = depth;result = node.val;}dfs(node.left,depth+1);dfs(node.right,depth+1);}
}
相关文章:
java算法day16
java算法day16 112 路径总和404 左叶子之和513 找树左下角的值 112 路径总和 题型判定为自顶向下类型,并且为路径和类型。 那就套模板。 自顶向下就是从上到下处理,那么就是前序遍历的思想。 class Solution {boolean res false;public boolean hasP…...
华为HCIP Datacom H12-821 卷41
1.多选题 以下关于BGP Atomic_Aggregate和Aggregator的描述,正确的是哪些项? A、Aggregator属性属于可选过渡属性 B、Atomic_Aggregate属于公认任意属性 C、收到携带Atomic_Aggregate属性的路由表示这条路由不能再度明细化 D、 Agregator表示某条路由可能出现…...
【React Hooks原理 - forwardRef、useImperativeHandle】
概述 上文我们聊了useRef的使用和实现,主要两个用途:1、用于持久化保存 2、用于绑定dom。 但是有时候我们需要在父组件中访问子组件的dom或者属性/方法,而React中默认是不允许父组件直接访问子组件的dom的,这时候就可以通过forwa…...
用于可穿戴传感器的人类活动识别、健康监测和行为建模的大型语言模型
这篇论文题为《用于可穿戴传感器的人类活动识别、健康监测和行为建模的大型语言模型:早期趋势、数据集和挑战的综述》,由埃米利奥费拉拉(Emilio Ferrara)撰写。论文主要内容如下: 摘要 可穿戴技术的普及使得传感器数…...
react事件绑定
react基础事件绑定 function passwordChange(e){console.log(e.target.value); } function usernameChange(e){console.log(e.target.value); }function App() {return (<div><input type"text" placeholder请输入用户名onChange{usernameChange}/><i…...
spring框架之AOP注解方式(java代码实例)
目录 半注解形式: 业务层接口实现类: 编写切面类: 在配置文件里面唯一需要加的: 测试类: 全注解形式: 不要配置文件,改为配置类: 同样的业务层接口实现类: 同样的…...
windows下gcc编译C、C++程序 MinGW编译器
文章目录 1、概要2、MinGW安装2.1 编译器下载2.2 编译器安装2.3 设置环境变量2.4 查看gcc版本信息 3、编译C、C程序3.1 编写Hello World.c3.2 编译C程序3.3 运行程序3.4 编译C程序 1、概要 GCC原名为GNU C语言编译器(GNU C Compiler),只能处…...
uniapp启动图延时效果,启动图的配置
今天阐述uniapp开发中给启动图做延迟效果,不然启动图太快了,一闪就过去了; 一:修改配置文件:manifest.json "app-plus" : {"splashscreen" : {"alwaysShowBeforeRender" : false,"…...
SQL,python,knime将数据混合的文字数字拆出来,合并计算(学习笔记)
将下面将数据混合的文字数字拆出来,合并计算 一、SQL解决: ---创建表插入数据 CREATE TABLE original_data (id INT AUTO_INCREMENT PRIMARY KEY,city VARCHAR(255),value DECIMAL(10, 2) );INSERT INTO original_data (city, value) VALUES (上海0.5…...
【算法】LRU缓存
难度:中等 题目: 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,…...
解决elementUI列表的疑难杂症,排序显示错乱的问题
大家好,在使用elementUI表格时,有时会出现一些意料之外的问题,比如数据排序正常但表格显示、排序错乱等。在网上搜索后一般有2种解决方法:1.给表格每一项的el-table-column添加唯一的id用于区分。2.给表格每一项的el-table-column…...
重大消息:手机车机互联投屏专题发布-千里马带你学框架
背景: android投屏的使用场景以前在新能源车机还没火爆时候,大部分停留在手机小屏幕投屏到大屏幕的情况及整个多端设备的互动,整体需求和技术发展其实也就是比较有限,但是新能源车机火爆后,那么这种手机和车机互联互动…...
jail子系统里升级Ubuntu focal到jammy
Ubuntu focal是20.04 ,jammy版本是22.04,本次的目的就是将FreeBSD jail子系统里的Ubuntu 从20.04升级到22.04 。这个focal 子系统是通过cbsd克隆得到的。使用CBSD克隆复制Ubuntu jail子系统环境-CSDN博客 do-release-upgrade升级没成功,用de…...
2024年7月20日(星期六)骑行支里山
2024年7月20日 (星期六)骑行支里山,早8:00到8:30,大观公园门口集合,9:00准时出发【因迟到者,骑行速度快者,可自行追赶偶遇。】 偶遇地点:大观公园门口集合 ,家住东,南,北…...
Python:正则表达式相关整理
最近因为一些原因频繁使用正则表达式,因为以前系统整理过关于正则表达式的相关知识,所以这里仅记录使用期间遇到的问题。 本文内容基于re包 1. match和search方法的区别 在Python中,re.search和re.match都是用于匹配字符串的正则表达式函数&a…...
ChatGPT对话:有关花卉数据集
【编者按】编者准备研究基于深度学习的花卉识别,首先需要花卉数据集。 后续,编者不断会记录研究花卉识别过程中的技术知识,敬请围观 1问:推荐一下用于深度学习的花卉数据集 ChatGPT 以下是一些用于深度学习的优秀花卉数据集&am…...
特征向量及算法
数据挖掘流程 加载数据 把需要的模型数据先计算出来 特征工程 提取数据特征,对特征数据进行清洗转化 数据的筛选和清洗数据转化 类型转为 性别 男,女 ----> 1,0特征交叉 性别/职业/收入 —> 新特这 优质男性程序员 将多个特征值组合在一起特征筛选…...
cpp 强制转换
一、static_cast static_cast 是 C 中的一个类型转换操作符,用于在类的层次结构中进行安全的向上转换(从派生类到基类)或进行不需要运行时类型检查的转换。它主要用于基本数据类型之间的转换、对象指针或引用的向上转换(即从派生…...
MySQL字符串魔法:拼接、截取、替换与定位的艺术
在数据的世界里,MySQL作为一把强大的数据处理利剑,其字符串处理功能犹如魔术师手中的魔法棒,让数据变换自如。今天,我们就来一场关于MySQL字符串拼接、截取、替换以及查找位置的奇幻之旅,揭开这些操作的神秘面纱。 介绍…...
在 Windows 上开发.NET MAUI 应用_1.安装开发环境
开发跨平台的本机 .NET Multi-platform App UI (.NET MAUI) 应用需要 Visual Studio 2022 17.8 或更高版本,或者具有 .NET MAUI 扩展的最新 Visual Studio Code。要开始在 Windows 上开发本机跨平台 .NET MAUI 应用,请按照安装步骤安装 Visual Studio 20…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...
Xela矩阵三轴触觉传感器的工作原理解析与应用场景
Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知,帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量,能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度,还为机器人、医疗设备和制造业的智…...
篇章二 论坛系统——系统设计
目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...
【51单片机】4. 模块化编程与LCD1602Debug
1. 什么是模块化编程 传统编程会将所有函数放在main.c中,如果使用的模块多,一个文件内会有很多代码,不利于组织和管理 模块化编程则是将各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数声明,其他.c文…...
