二分查找过程描述和代码实现、二分查找插入点篇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;
}
热门推荐
谭盾如何用音乐为《卧虎藏龙》打造武侠世界
谭盾多媒体音乐:艺术设计的新潮流
谭盾与《卧虎藏龙》:一座连接东西方音乐的奥斯卡金桥
人工智能时代的能源挑战与绿色发展机遇
用梅花易数预测2025年运势!
芭芭拉·明托教你用金字塔原理写文案
用金字塔原理写一份炸裂的商业计划书
金字塔原理:提升团队管理效率的金钥匙
三亚旅游:防晒防蚊全攻略
三亚旅游必带神器大揭秘!
《我功夫特牛》游戏体验提升指南:合法合规是根本
国产首个治疗银屑病生物制剂为“重庆造”
手把手教你创作恐怖小说的15个诀窍
《原神》玩家因使用GG修改器被封号,游戏公平性需共同维护
塔罗牌解读:未来两个月复合可能性较低
荣格心理学视角下的塔罗牌:解读一段感情的未来
塔罗牌预测:你和TA的感情会如何发展?
塔罗牌预测:未来两个月与前任复合的可能性
“优薯计划”揭秘:新型生物材料如何改变甘薯育种?
秋冬养胃正当时!谷氨酰胺使用全攻略
秋冬护胃小妙招:如何安全储存谷氨酰胺薁磺酸钠颗粒?
中医音乐疗法:从五行理论到现代医疗的创新应用
掌握科学的情绪管理技巧,提升生活质量
武士道:如何塑造日本人的刻板印象?
双十一的大健康产品如何精准触达消费者?
谭盾《女书》:传统乐器的现代演绎
谭盾:音乐与视觉艺术的跨界大师
谭盾《地图》:用音乐绘出文化传承之路
家居布局改善夫妻关系,你get了吗?
塔罗牌测婚姻,你敢试试吗?