二分查找过程描述和代码实现、二分查找插入点篇11
创作时间:
作者:
@小白创作中心
二分查找过程描述和代码实现、二分查找插入点篇11
引用
CSDN
1.
https://m.blog.csdn.net/weixin_44262492/article/details/145495156
1、二分查找
1.1、相关定义和描述
定义:一种基于分治策略的高效搜索算法。利用数据有序性,每轮缩小一半搜索范围,直至找到目标元素或搜索区间为空为止。
问题描述:给定一个长度为 n的数组 nums ,元素按从小到大的顺序排列且不重复。请查找并返回元素 target 在该数组中的索引。若数组不包含该元素,则返回-1。
1.2、过程描述
先初始化指针i= 0和考,分别指向数组首元素和尾元素,代表搜索区间【0,n-】。请注意,中括号表示闭区间,其包含边界值本身。
1.3、代码实现
/* 二分查找(双闭区间) */
int binarySearch(int[] nums, int target) {
// 初始化双闭区间 [0, n-1] ,即 i, j 分别指向数组首元素、尾元素
int i = 0, j = nums.length - 1;
// 循环,当搜索区间为空时跳出(当 i > j 时为空)
while (i <= j) {
int m = i + (j - i) / 2; // 计算中点索引 m
if (nums[m] < target) // 此情况说明 target 在区间 [m+1, j] 中
i = m + 1;
else if (nums[m] > target) // 此情况说明 target 在区间 [i, m-1] 中
j = m - 1;
else // 找到目标元素,返回其索引
return m;
}
// 未找到目标元素,返回 -1
return -1;
}
1.4、复杂度分析
时间复杂度:O(log n):在二分循环中,区间每轮缩小一半,循环次数为log 2 n)。
空间复杂度: O(1):指针i和j使用常数大小空间
2、二分查找插入点
二分查找搜索目标元素,解决许多变种问题,比如搜索目标元素的插入位置。
2.1、无重复元素的情况
定一个长度为n的有序数组 nums 和一个元素 target ,数组不存在重复元素。现将 target 插入数组 nums 中,并保持其有序性。若数组中已存在元素 target ,则插入到其左方。请返回插入后 target 在数组中的索引.
/* 二分查找插入点(无重复元素) */
int binarySearchInsertionSimple(int[] nums, int target) {
int i = 0, j = nums.length - 1; // 初始化双闭区间 [0, n-1]
while (i <= j) {
int m = i + (j - i) / 2; // 计算中点索引 m
if (nums[m] < target) {
i = m + 1; // target 在区间 [m+1, j] 中
} else if (nums[m] > target) {
j = m - 1; // target 在区间 [i, m-1] 中
} else {
return m; // 找到 target ,返回插入点 m
}
}
// 未找到 target ,返回插入点 i
return i;
}
2.2、存在重复元素情况
在上一题的基础上,规定数组可能包含重复元素,其余不变。
/* 二分查找插入点(存在重复元素) */
int binarySearchInsertion(int[] nums, int target) {
int i = 0, j = nums.length - 1; // 初始化双闭区间 [0, n-1]
while (i <= j) {
int m = i + (j - i) / 2; // 计算中点索引 m
if (nums[m] < target) {
i = m + 1; // target 在区间 [m+1, j] 中
} else if (nums[m] > target) {
j = m - 1; // target 在区间 [i, m-1] 中
} else {
j = m - 1; // 首个小于 target 的元素在区间 [i, m-1] 中
}
}
// 返回插入点 i
return i;
}
热门推荐
天然钻石和莫桑钻有什么区别?
肉眼分辨莫桑石和钻石,钻石和莫桑石一眼能看出来吗
长途拼车费用怎样合理计算?计算出的费用怎样确保公平分摊?
世界睡眠日:关于睡眠的15个科学解答
2024年视角:腰椎间盘突出症课件的案例分析
减轻体重能降低血压吗
新加坡元对人民币历年汇率表:最新历史数据分析解读
强化公安交管服务,助力T3航站楼安全“起航”
我的世界服务器资源管理技巧
如何追踪市场历史最低点
炸鸡排用油多久能炸熟?
耳洞流脓怎么办?家庭消毒妙招与就医建议全解析!
如何进行SWOT分析?
深度学习中常见的激活函数及其优缺点
英国经典童话故事《快乐王子》
法院判决书查询的法律程序与实务操作指南
刑事判决书的调取流程、法律依据及实务要点
找到适合自己的训练分化,告别健身迷茫期
在流程管理中应用ISO标准
哈佛分析框架财务分析
项目管理超出期望怎么办
2025年必玩的5款武侠手游大盘点
高反提前吃红景天有用吗
脚后跟经常干裂起皮,是缺了维生素吗?或是2种病来袭,早知早好
被起诉后如何做证据保全?民事纠纷是否需要诉讼保全?
离婚诉讼败诉方的判决分析
炉石传说阵营是什么机制 阵营机制介绍
白内障手术人工晶体价格全解析
现代电力系统中的电力电子技术:10大应用案例深度解析
各类胶水分类和作用,教你详细了解各类胶粘剂的分类