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

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)

相关推荐
海绵宝宝转agent34 分钟前
LeetCodehot100题解
java·笔记·学习·算法·leetcode·深度优先
octopus_c39 分钟前
C++ 运算符重载详解 && 日期类的实现
开发语言·c++
青少儿编程课堂42 分钟前
2026蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:堆排序与优先队列解析
c++·python·算法·bfs·信息学竞赛
j7~1 小时前
【C++ 面试笔记】(篇二):类与数据抽象 & STL 容器与算法
开发语言·c++·面试·stl容器和算法·类和数据抽象
Fuyo_11191 小时前
深入解析 C++ unordered_set 与 unordered_map 的核心特性与性能实战
开发语言·c++
码匠许师傅1 小时前
【C++三方组件】FFmpeg:音视频处理的瑞士军刀
c++·ffmpeg·音视频
SZYSK1 小时前
OpenHarmony 上读卡、推理和双屏刷新抢 CPU:核验机与消费机的调度差
物联网·算法·harmonyos·1024程序员节
ShineWinsu2 小时前
对于Qt:QPushButton常见属性的解析
开发语言·c++·qt·api·gui·按钮·qpushbutton
Ivanqhz2 小时前
MoE + LLM 应用
数据库·人工智能·pytorch·python·深度学习·算法·1024程序员节
Lhan.zzZ2 小时前
用 Qt 构建线程安全的通讯静态库:从线程亲和性到完整工程
c++·vscode·qt·tcp/ip·udp