【学习笔记】数据结构 二分查找(二分查找模板+边界处理+查找区间+旋转数组)

一、二分查找模板

模板 1:左闭右闭 left, right

区间含义:left 和 right 都代表能取到的有效下标

模板2:左闭右开 [left, right)

right 是取不到的边界,数组长度作为初始 right

二、边界处理重点

1、mid 计算:mid = left + (right-left)/2,不要写(left+right)/2,left+right过大时会整数溢出

2、循环条件判断

left,right:left <= right,左右相等时区间还有一个元素,仍然要判断

[left,right):left < right,left 等于 right 区间就空了

3、更新左右指针

如果 mid 位置的值不是 target,mid 一定要排除在外

目标在右边:left = mid +1

目标在左边:right = mid -1(闭区间模板)

4、适用场景:普通查找、找左边界、找右边界(找第一个 / 最后一个满足条件的元素)

三、旋转有序数组知识点

概念:原本升序数组,在某个点旋转,分成两段有序子数组,例如 4,5,6,7,0,1,2

特点:局部有序,整个数组不是完全有序,但其中一半一定是有序的。

二分思路:判断 mid 左边还是右边是有序区间,看 target 是否落在有序区间内,再收缩区间。

重点:

1、每次取 mid,先判断左半段 left,mid 是否有序

2、如果左半有序:判断 target 是否在numsleft ≤ target < numsmid,是就去左边,否则去右边

3、如果右半有序:判断 target 是否在numsmid < target ≤ numsright,是就去右边,否则去左

4、注意:数组存在重复元素时,无法判断哪边有序,需要right--缩小范围(进阶)

相关推荐
一只小小的芙厨11 小时前
【线性DP】
学习·算法·动态规划
2501_9269783311 小时前
给自指系统接一个外部锚 —— 一个关于「用 AI 观察自己」的方法
人工智能·经验分享·笔记·机器学习·ai写作
li星野11 小时前
DO — Auxiliary Verb (One-Page Notes)
学习
minglie111 小时前
关系的有向管道模型
学习
~kiss~13 小时前
LangChain 基础学习
学习·langchain
一木 之林13 小时前
提示词工程学习总结:用 Few-shot 把大模型调教成金融文本分类、抽取与匹配的自动化流水线
人工智能·学习·计算机视觉·金融·分类
传奇开心果编程14 小时前
【Compose Multiplatform 跨端开发学与练】第7课 平台适配与互操作
android·windows·学习·ui·ios·kotlin·composer
我命由我1234514 小时前
Photoshop - Photoshop 使用对齐功能定位元素
学习·职场和发展·产品运营·求职招聘·职场发展·产品经理·学习方法
AOI小白新手上路15 小时前
anomalib 缺陷检测复现笔记:从跑通库到 EfficientAD 落地
人工智能·笔记·机器学习
阳光九叶草LXGZXJ16 小时前
达梦数据库-报错-16-MERGE INTO提示:无效的列名[XX]
linux·运维·数据库·sql·学习