入门 对有序数组进行二分搜索 + 图解 (上篇)

1)有序数组 中确定 num 存在 还是 不存在

cpp 复制代码
bool exist(int num,int arr[],int len) {
	if (len == 0) return false;
	int left = 0, right = len - 1, mid = 0;
	while (left <= right) {
		mid = left + ((right - left) >> 2);
		if (arr[mid] == num) return true;
		else if (arr[mid] > num) right = mid - 1;
		else left = mid + 1;
	}
	return false;
}

2)有序数组 中找 >=num最左位置

cpp 复制代码
// 2)在有序数组中找 >= num的最左位置
int findLeft(int num,int arr[], int len) {
	int left = 0, right = len - 1, mid = 0;
	int ans = -1;
	while (left <= right) {
		mid = left + ((right - left) >> 1);
		if (arr[mid] >= num) {
			ans = mid;
			right = mid - 1;
		}
		else {
			left = mid + 1;
		}
	}
	return ans;
}

3)有序数组 中找 <=num最右位置

cpp 复制代码
// 3)在有序数组中找<=num的最右位置
int findRight(int num, int arr[], int len) {
	int left = 0, right = len - 1, mid = 0;
	int ans = -1;
	while (left <= right) {
		mid = left + ((right - left) >> 1);
		if (arr[mid] <= num) {
			ans = mid;
			left = mid + 1;
		}
		else {
			right = mid - 1;
		}
	}
	return ans;
}

二分搜索时间复杂度O(logn)

相关推荐
让我们一起加油好吗20 分钟前
【C++】封装红黑树模拟实现 set 和 map
linux·c++·set·map·红黑树
Mr.Ja23 分钟前
【LeetCode热题100】No.11——盛最多水的容器
算法·leetcode·贪心算法·盛水最多的容器
hsjkdhs26 分钟前
C++之类的继承与派生
开发语言·c++
冷徹 .35 分钟前
2024ICPC区域赛香港站
数据结构·c++·算法
沐怡旸1 小时前
【底层机制】std:: function 解决的痛点?是什么?如何实现?如何正确用?
c++·面试
浅川.251 小时前
xtuoj string
开发语言·c++·算法
韧竹、1 小时前
数据结构之顺序表
c语言·数据结构
韩非1 小时前
if 语句对程序性能的影响
算法·架构
用户916357440951 小时前
LeetCode热题100——15.三数之和
javascript·算法
ting_zh2 小时前
导数、偏导数与梯度:机器学习数学基础
算法·基础数学