当前位置: 首页 > 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
}

相关文章:

  • LeetCode--27.移除元素
  • 睡岗检测算法AI智能分析网关V4全场景智能守护,筑牢安全效率防线
  • UE5 学习系列(三)创建和移动物体
  • 【QT】自动更新库QSimpleUpdater使用实例封装
  • 在微服务架构中,怎么搭建Maven私服
  • eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
  • 力扣HOT100之堆:215. 数组中的第K个最大元素
  • docker 安装 milvus standalone 版本 + attu
  • spark数据处理练习题番外篇【下】
  • 空间注意力机制
  • 如何判断一个bug,是前端还是后端的?
  • 积累-Vue.js 开发实用指南:ElementUI 与核心技巧
  • 【动作】动作标签分类的三大模块
  • 如何在看板中体现优先级变化
  • 【沉浸式求职学习day53】【Spring】
  • 3.3.1_1 检错编码(奇偶校验码)
  • 智能呼入系统助力酒店客服服务
  • 立足数字人文,深化历史叙事|科学智能赋能人文社科领域研究
  • 扁平表+递归拼树思想
  • PyTorch终极实战:从自定义层到模型部署全流程拆解​
  • 沈阳工伤保险做实网站/重庆seo排名方法
  • 10月哪个网站做电影票活动/免费推广网站大全
  • wap网站怎么打开/关系营销案例
  • 北京大型网站开发/百度一下网页版浏览器
  • 电商供应链怎么找/宁波品牌网站推广优化公司
  • 网站制作1000元/交换友情链接是什么意思