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

LeetCode--HOT100题(42)

目录

  • 题目描述:108. 将有序数组转换为二叉搜索树(简单)
    • 题目接口
    • 解题思路
    • 代码
  • PS:

题目描述:108. 将有序数组转换为二叉搜索树(简单)

给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。

高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。

LeetCode做题链接:LeetCode-两数之和

示例 1:
在这里插入图片描述

输入:nums = [-10,-3,0,5,9]
输出:[0,-3,9,-10,null,5]
解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:

在这里插入图片描述
示例 2:
在这里插入图片描述

输入:nums = [1,3]
输出:[3,1]
解释:[1,null,3] 和 [3,1] 都是高度平衡二叉搜索树。

提示:

1 <= nums.length <= 104
-104 <= nums[i] <= 104
nums 按 严格递增 顺序排列

题目接口

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public TreeNode sortedArrayToBST(int[] nums) {}
}

解题思路

  1. 定义一个TreeNode类,表示二叉树的节点。每个节点包含一个整数值和左右子节点的引用。
  2. sortedArrayToBST方法中,调用dfs方法来递归地构建平衡二叉搜索树。dfs方法接受三个参数:整数数组nums、子数组的起始索引lo和结束索引hi
  3. dfs方法中,首先检查当前子数组是否为空(即lo > hi),如果是,则返回null表示没有节点需要构造。
  4. 如果当前子数组不为空,计算当前子数组的中间索引mid,然后创建一个值为nums[mid]的根节点。
  5. 接下来,递归地构建左子树和右子树。左子树的范围是[lo, mid-1],右子树的范围是[mid+1, hi]。通过传递新的起始索引和结束索引给dfs方法来实现递归。
  6. 最后,返回当前子数组的根节点。
  7. 当所有子数组都被处理后,sortedArrayToBST方法将返回最终构建的平衡二叉搜索树的根节点。

代码

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
public TreeNode sortedArrayToBST(int[] nums) {return dfs(nums, 0, nums.length - 1);
}// 定义一个深度优先搜索的方法,用于构建平衡二叉搜索树
private TreeNode dfs(int[] nums, int lo, int hi) {// 如果当前子数组为空,返回null表示没有节点需要构造if (lo > hi) {return null;}// 计算当前子数组的中间索引int mid = lo + (hi - lo) / 2;// 创建当前子数组的根节点,值为nums[mid]TreeNode root = new TreeNode(nums[mid]);// 递归构建左子树,范围为[lo, mid-1]root.left = dfs(nums, lo, mid - 1);// 递归构建右子树,范围为[mid+1, hi]root.right = dfs(nums, mid + 1, hi);// 返回当前子数组的根节点return root;
}

成功!
在这里插入图片描述

PS:

感谢您的阅读!如果您觉得本篇文章对您有所帮助,请给予博主一个喔~

相关文章:

LeetCode--HOT100题(42)

目录 题目描述&#xff1a;108. 将有序数组转换为二叉搜索树&#xff08;简单&#xff09;题目接口解题思路代码 PS: 题目描述&#xff1a;108. 将有序数组转换为二叉搜索树&#xff08;简单&#xff09; 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xf…...

leetcode-49.字母异位词分组-day20

...

YOLOv8教程系列:三、K折交叉验证——让你的每一份标注数据都物尽其用(yolov8目标检测+k折交叉验证法)

YOLOv8教程系列&#xff1a;三、K折交叉验证——让你的每一份标注数据都物尽其用&#xff08;yolov8目标检测k折交叉验证法&#xff09; 0.引言 k折交叉验证&#xff08;K-Fold Cross-Validation&#xff09;是一种在机器学习中常用的模型评估技术&#xff0c;用于估计模型的性…...

leetcode算法题--表示数值的字符串

原题链接&#xff1a;https://leetcode.cn/problems/biao-shi-shu-zhi-de-zi-fu-chuan-lcof/description/?envTypestudy-plan-v2&envIdcoding-interviews 题目类型有点新颖&#xff0c;有限状态机 // CharType表示当前字符的类型 // State表示当前所处的状态 type State…...

Docker安装及Docker构建简易版Hadoop生态

一、首先在VM创建一个新的虚拟机将Docker安装好 更新系统&#xff1a;首先打开终端&#xff0c;更新系统包列表。 sudo apt-get update sudo apt-get upgrade下图是更新系统包截图 安装Docker&#xff1a;使用以下命令在Linux上安装Docker。 sudo apt-get install -y docker.i…...

使用Burp Suite进行Web应用渗透测试

使用Burp Suite进行Web应用渗透测试是一种常见的方法&#xff0c;可以帮助发现Web应用程序中的安全漏洞和弱点。 步骤&#xff1a; 准备工作&#xff1a; 首先&#xff0c;确保已经安装了Burp Suite&#xff0c;并配置浏览器以使用Burp Suite作为代理。 配置代理&#xff1a;…...

Github的使用指南

首次创建仓库 1.官网创建仓库 打开giuhub官网&#xff0c;右上角点击你的头像&#xff0c;随后点击your repositories 点击New开始创建仓库 如下图为创建仓库的选项解释 出现如下界面就可以进行后续的git指令操作了 2.git上传项目 进入需上传项目的所在目录&#xff0c;打开…...

mongodb 添加加点 stateStr 停在 STARTUP

解决办法 PRIMARY 节点是的host 是否是内网IP&#xff0c;如果是内网IP 需要切换成外网IP 即可&#xff1b;...

c语言中编译过程与预处理

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、c语言的编译与链接1、编译与链接概述2、编译与链接详解 二、c语言预处理1.c语言中内置的预定义符号2、#define定义标识符3、#define定义宏4、#define 替换规…...

TP-LINK 路由器设置内网穿透

TP-LINK 路由器设置内网穿透 开发中经常遇到调用第三方软件回调调试的情况&#xff0c;例如微信开发&#xff0c;支付回调等测试&#xff0c;用内网穿透是一种简单的方式也是偷懒的方式。 以TP-LINK路由器为例实现内网穿透 登录路由器 2.找到路由器虚拟服务器&#xff0c;添加…...

A 题国际旅游网络的大数据分析-详细解析与代码答案(2023 年全国高校数据统计与调查分析挑战赛

请你们进行数据统计与调查分析&#xff0c;使用附件中的数据&#xff0c;回答下列问题&#xff1a; ⚫ 问题 1: 请进行分类汇总统计&#xff0c;计算不同国家 1995 年至 2020 年累计旅游总人数&#xff0c;从哪个国家旅游出发的人数最多&#xff0c;哪个国家旅游到达的人数最多…...

《深入理解Java虚拟机》读书笔记: 类加载器

类加载器 虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现&#xff0c;以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。 类加载器可以说是Java语言的一项创新&…...

宝塔计划任务读取文件失败

想挂计划任务 相关文章【已解决】计划任务读取文件失败 - Linux面板 - 宝塔面板论坛 对方反馈的是执行下面的命令 chattr -ai /var/spool/cron 后来发现直接没有这个文件夹&#xff0c;然后通过mkdir命令创建文件夹&#xff0c;成功在宝塔创建了计划任务 后面发现任务虽然添…...

Python操作sql,备份数据库

1、批量执行sql import pymysql# 执行批量的 SQL 语句 def executeBatchSql(cursor, sqlStatements):for sql in sqlStatements:try:cursor.execute(sql)print(Executed SQL statement:, sql)except Exception as e:print(Error executing SQL statement:, e)# 创建数据库连接…...

Linux线程 --- 生产者消费者模型(C语言)

在学习完线程相关的概念之后&#xff0c;本节来认识一下Linux多线程相关的一个重要模型----“ 生产者消费者模型” 本文参考&#xff1a; Linux多线程生产者与消费者_红娃子的博客-CSDN博客 Linux多线程——生产者消费者模型_linux多线程生产者与消费者_两片空白的博客-CSDN博客…...

Vue2向Vue3过度核心技术computed计算属性

目录 1 computed计算属性1.1 概念1.2 语法1.3 注意1.4.案例1.5.代码准备 2 computed计算属性 VS methods方法2.1 computed计算属性2.2 methods计算属性2.3 计算属性的优势2.4 总结 3 计算属性的完整写法 1 computed计算属性 1.1 概念 基于现有的数据&#xff0c;计算出来的新属…...

芯片行业震荡期,数字后端还可以入吗?

自去年开始&#xff0c;芯片行业仿佛进入了动荡期&#xff0c;经历了去年秋招和今年春招的小伙伴都知道&#xff0c;如今找工作有多难。 半导体行业人才缩减、各大厂裁员&#xff0c;在加上高校毕业生人数破千万&#xff0c;对于即将踏入IC这个行业的应届生来说&#xff0c;今…...

“精准时空”赋能制造业智能化发展

作者&#xff1a;邓中亮 高达动态厘米级的高精度定位服务&#xff0c;不仅是北斗卫星导航系统的一大独门绝技&#xff0c;其在产业化应用层面也已逐步向普适化、标配化演进&#xff0c;并延展出时空智能新兴产业。 5月17日&#xff0c;当长征三号乙运载火箭成功发射北斗系统的…...

Kotlin协程flow发送时间间隔debounce

Kotlin协程flow发送时间间隔debounce debounce的作用是让连续发射的数据之间间隔起来。典型的应用场景是搜索引擎里面的关键词输入&#xff0c;当用户输入字符时候&#xff0c;有时候&#xff0c;并不希望用户每输入任何一个单字就触发一次后台真正的查询&#xff0c;而是希望…...

ServiceManager接收APP的跨进程Binder通信流程分析

现在一起来分析Server端接收&#xff08;来自APP端&#xff09;Binder数据的整个过程&#xff0c;还是以ServiceManager这个Server为例进行分析,这是一个至下而上的分析过程。 在分析之前先思考ServiceManager是什么&#xff1f;它其实是一个独立的进程&#xff0c;由init解析i…...

【AI】短期记忆:会话上下文管理与实现

短期记忆&#xff1a;会话上下文管理与实现 &#x1f4dd; 本章学习目标&#xff1a;本章深入探讨记忆机制&#xff0c;这是AI Agent持续执行的关键能力。通过本章学习&#xff0c;你将全面掌握"短期记忆&#xff1a;会话上下文管理与实现"这一核心主题。 一、引言&a…...

2026金铲铲之战电脑版模拟器实测:选对模拟器轻松上分

一、实测前提说明作为拥有三年游玩经验的金铲铲之战老弈士&#xff0c;从手机端切换到电脑端游玩后&#xff0c;大屏在阵容运营、棋子对位、选秀博弈上的优势十分突出&#xff1a;手机小屏不仅看不清棋子星级、装备细节&#xff0c;频繁触屏操作还容易误触卖错棋子、放错站位&a…...

“找档难、找档慢”困扰工作?档案宝智能检索功能,让档案查询秒响应

目录 档案之痛&#xff1a;效率与风险并存 破局之道&#xff1a;智能检索成关键 写在最后 在日常办公中&#xff0c;你是否遇到过这样的场景&#xff1a;需要调取一份重要合同档案&#xff0c;翻遍整个文件柜却找不到&#xff1b;领导紧急要一份历史数据&#xff0c;手动搜索了…...

5步解决网易云音乐NCM文件难题:ncmdumpGUI实战指南

5步解决网易云音乐NCM文件难题&#xff1a;ncmdumpGUI实战指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾经遇到过这样的情况&#xff1a;在网易…...

从原理图到Vivado:手把手教你搞定XC7Z020-CLG400的EMIO引脚分配与约束

从原理图到Vivado&#xff1a;手把手教你搞定XC7Z020-CLG400的EMIO引脚分配与约束 在ZYNQ7000系列开发中&#xff0c;EMIO引脚的正确分配与约束是实现PS与PL协同工作的关键环节。许多工程师在初次接触ZYNQ架构时&#xff0c;往往会被MIO、EMIO和AXI_GPIO的关系所困扰&#xff…...

taotoken模型广场功能体验与主流模型选型建议

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 taotoken模型广场功能体验与主流模型选型建议 1. 平台入口与模型广场概览 登录Taotoken控制台后&#xff0c;最直观的功能入口之一…...

STM32F103C8T6与DHT11单总线通信:从时序解析到数据校验的实战指南

1. 认识STM32F103C8T6与DHT11这对黄金搭档 第一次接触嵌入式开发的朋友可能会觉得&#xff0c;让单片机读取温湿度数据是个复杂的事情。但当你用STM32F103C8T6这颗性价比超高的Cortex-M3内核芯片&#xff0c;搭配DHT11这个经典温湿度传感器时&#xff0c;事情就变得简单多了。…...

微创式电子设备设计:从自动化到自主化的智能革命

1. 项目概述&#xff1a;从“工具”到“魔法”的隐形革命十几年前&#xff0c;我在《EE Times》上读到一篇由西蒙巴克&#xff08;Simon Barker&#xff09;撰写的文章&#xff0c;标题是一个直击灵魂的提问&#xff1a;“微创式电子设备在哪里&#xff1f;” 这个问题像一颗种…...

KLayout终极指南:5分钟快速上手开源版图设计工具

KLayout终极指南&#xff1a;5分钟快速上手开源版图设计工具 【免费下载链接】klayout KLayout Main Sources 项目地址: https://gitcode.com/gh_mirrors/kl/klayout KLayout是一款功能强大的开源版图设计工具&#xff0c;专为集成电路&#xff08;IC&#xff09;设计和…...

从雨篷结构事故处理谈幕墙钢结构的概念设计

从雨篷结构事故处理谈幕墙钢结构的概念设计 雨篷结构设计是幕墙钢结构设计最重要内容。但由于雨篷静定结构体系的先天不足,外加设计师理论认识水平与设计经验的限制、施工时的不当行为,经常造成工程事故。这些设计缺陷和工程事故的发生,多是由于对雨篷进行概念设计时认知不…...