☂️二分查找(有序)
2022-5-19
| 2023-5-15
0  |  阅读时长 0 分钟
type
status
password
date
slug
summary
category
URL
tags
icon

二分查找基本原理

  • 算法流程
      1. 建模:划分区域,确定划分条件IsBlue()
      1. 确定返回 l 还是 r。如右图所示不同条件小的返回值
      1. 套用算法模板
      1. 后续处理(返回查找值等)
notion image
重点边界条件是left+1<right,这样再执行一次恰好会使得l、r相邻(left<right)。
 

经典二分查找算法

任务
示例
根据上述模板的基本思想如下
目标值是否存在
第一个大于等于目标值的索引,然后判断第一个值是不是目标值 最后一个小于等于目标值的索引,然后判断最后一个是不是目标值
目标值在数组中第一个、最后一个位置
第一个大于等于目标值的索引 最后一个小于等于目标值的索引
要插入的位置
第一个大于等于目标值的位置

查找目标值

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
示例 1:

74. 搜索二维矩阵 - 力扣(LeetCode)

将二维数组变成一维数组[0,…,row*col],那么一维数组与二维数组的对应关系就是

278. 第一个错误的版本 - 力扣(LeetCode)

你有 n 个版本 [1, 2, ..., n]的软件,你想找出导致之后所有版本出错的第一个错误的版本。

34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣

处理边界
规范化

35. 搜索插入位置 - 力扣(LeetCode)

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
示例

数值二分型

如果符合有序这一特性的数值二分型题目同样可以使用上述模板。但是数值型不用考虑超出边界的问题。
题目
范围
特性
使用上述模板
[1,n]
单调递增
可以
正整数
单调递增
可以
非负数
单调递增
可以

374. 猜数字大小 - 力扣(LeetCode)

每轮游戏,我都会从 1 到 n 随机选择一个数字。 请你猜选出的是哪个数字。
你可以通过调用一个预先定义好的接口 int guess(int num) 来获取猜测结果,返回值一共有 3 种可能的情况(-1,1 或 0):
  • 1:我选出的数字比你猜的数字小 pick < num
  • -1:我选出的数字比你猜的数字大 pick > num
  • 0:我选出的数字和你猜的数字一样。恭喜!你猜对了!pick == num

367. 有效的完全平方数 - 力扣(LeetCode)

给你一个正整数 num 。如果 num 是一个完全平方数,则返回 true ,否则返回 false 。

69. x 的平方根 - 力扣(LeetCode)

 
  • 二分查找
  • kmp算法二分查找(旋转数组&山脉数据)
    Loading...
    目录