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

【LeetCode】二叉树相关算法题

目录

  • 1、二叉树使用前提
  • 2、算法题
    • 【1】搜索插入位置
    • 【2】在排序数组中查找元素的第一个和最后一个位置
    • 【3】x 的平方根
    • 【4】有效的完全平方数

1、二叉树使用前提

使用二叉树要满足以下两个条件:

1、有序数组
2、无重复值

2、算法题

【1】搜索插入位置

LeetCode第35题,题目如下:

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被顺序插入的位置。
请必须使用时间复杂度为O(log n)的算法。

示例1:

输入:nums = [1, 3, 5, 6], target = 5
输出:2

示例2:

输入:nums = [1, 3, 5, 6], target = 2
输出:1

示例3:

输入:nums = [1, 3, 5, 6], target = 7
输出:4

代码示例:

func searchInsert(nums []int, target int) int {left, right := 0, len(nums)-1var index intfor left <= right {mid := left + (right-left)/2if target == nums[mid] {return mid} else if target < nums[mid] { //目标值在左区间right = mid - 1index = mid} else { //目标值在右区间left = mid + 1index = mid + 1}}return index
}

【2】在排序数组中查找元素的第一个和最后一个位置

LeetCode第34题,题目如下:

给一个按照非递减顺序排列的整数数组nums,和一个目标值target。请找出给定目标值在数组中的开始位置和结束位置。
如果数组中不存在目标值target,返回[-1, -1]。
设计并实现时间复杂度为O(log n)的算法来解决问题。

示例1:

输入:nums = [5,7,7,8,8,10], target = 8
输出:[3, 4]

示例2:

输入:nums = [5,7,7,8,8,10], target = 6
输出:[-1, -1]

示例3:

输入: nums = [], target = 0
输出: [-1, -1]

代码示例:

func searchRange(nums []int, target int) []int {leftBorder, rightBorder := -2, -2 //左边界和右边界, 不能使用-1, 因为当目标值等于数组最左边值时,此时leftBorder=-1left, right := 0, len(nums)-1     //二分法查找的左右索引//先找右边界for left <= right {mid := left + (right-left)/2if target < nums[mid] { //目标值在左区间right = mid - 1} else {left = mid + 1rightBorder = left}}//再找左边界left, right = 0, len(nums)-1for left <= right {mid := left + (right-left)/2if target > nums[mid] { //目标值在右区间left = mid + 1} else {right = mid - 1leftBorder = right}}//判断三种情况if leftBorder == -2 || rightBorder == -2 { //目标值在最左边之外rightBorder=-2或者目标值在最右边之外leftBorder=-2return []int{-1, -1}} else if (rightBorder - leftBorder) > 1 { //目标值至少存在一个return []int{leftBorder + 1, rightBorder - 1}} else { //目标值的大小在数组范围内,但是没有相等的return []int{-1, -1}}
}

【3】x 的平方根

LeetCode第69题,题目如下:

给你一个非负整数 x ,计算并返回 x 的 算术平方根 。
由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。
注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。

示例 1:

输入:x = 4
输出:2

示例 2:

输入:x = 8
输出:2
解释:8 的算术平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。

提示:

0 <= x <= 231 - 1

代码示例:

func mySqrt(x int) int {left, right := 0, xvar index intfor left <= right {mid := left + (right-left)/2if mid*mid == x {return mid} else if mid*mid < x { //平方根在右区间left = mid + 1index = mid} else { //平方根在左区间right = mid - 1index = right}}return index
}

【4】有效的完全平方数

LeetCode第367题,题目如下:

给你一个正整数 num 。如果 num 是一个完全平方数,则返回 true ,否则返回 false 。
完全平方数 是一个可以写成某个整数的平方的整数。换句话说,它可以写成某个整数和自身的乘积。
不能使用任何内置的库函数,如 sqrt 。

示例 1:

输入:num = 16
输出:true
解释:返回 true ,因为 4 * 4 = 16 且 4 是一个整数。

示例 2:

输入:num = 14
输出:false
解释:返回 false ,因为 3.742 * 3.742 = 14 但 3.742 不是一个整数。

提示:

1 <= num <= 231 - 1

代码示例如下:

func isPerfectSquare(num int) bool {left, right := 1, numfor left <= right {mid := left + (right-left)/2if mid*mid == num {return true} else if mid*mid > num { //目标值在左区间right = mid - 1} else { //目标值在右区间left = mid + 1}}return false
}
http://www.xdnf.cn/news/967087.html

相关文章:

  • 笔记 软件工程复习
  • Vue.js教学第二十二章:vue实战项目商城项目
  • el-upload组件,上传文件失败,:on-error方法失效
  • 人工智能与大数据融合发展:新一代智能系统的演进路径
  • 计算机行业光辉开始暗淡
  • Unity3D中Gfx.WaitForPresent优化方案
  • 性能监控的核心要点
  • RestClient
  • AI书签管理工具开发全记录(二十):打包(完结篇)
  • 零基础学前端-传统前端开发(第一期-开发软件介绍与本系列目标)(VScode安装教程)
  • 群晖Nas - Docker(ContainerManager)上安装GitLab
  • Linux内核 -- INIT_WORK 使用与注意事项
  • Windows 文件路径与文件名限制
  • 如何根据excel表生成sql的insert脚本
  • ABP vNext + Hive 集成:多租户大数据 SQL 查询与报表分析
  • 【iOS】cell的复用以及自定义cell
  • 使用NNI剪枝工具对VGG16网络进行剪枝,同时使用知识蒸馏对剪枝后结果进行优化。(以猫狗二分类为例)
  • 认证与授权的区别与联系
  • 看板任务描述不清如何解决
  • 数据库学习笔记(十五)--变量与定义条件与处理程序
  • 云蝠智能大模型语音智能体:构建心理咨询领域的智能助手
  • leetcode1034. 边界着色-medium
  • 使用mpu6500, PID,互补滤波实现一个简单的飞行自稳控制系统
  • 南昌市新建区委书记陈奕蒙会见深兰科技集团董事长陈海波一行
  • 如何使用 DeepSeek 帮助自己的工作
  • 机械制造系统中 PROFINET 与 PROFIBUS-DP 的融合应用及捷米科技解决方案
  • Matlab点云合并函数pcmerge全解析
  • 线程与协程
  • Prometheus + Grafana 监控 RabbitMQ 实践指南
  • Spring Boot 分层架构与数据流转详解