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

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)

相关推荐
syagain_zsx7 小时前
算法基础篇 · 04 前缀和(C++ 题解)
c++·算法·前缀和
Logic1017 小时前
C语言/数据结构滑动窗口题解:替换k个字符后的最长连续相同字符子串(LeetCode 424)
c语言·数据结构·字符串·滑动窗口·时间复杂度·频率统计·算法题
汉克老师8 小时前
CSP-J 2026 初赛试题解析(第三部分:完善程序题(第一题))精讲
c++·csp-j·小学生·学c++编程
程序员阿鹏8 小时前
简单介绍一下软引用
java·开发语言·jvm·数据结构·后端
青山是哪个青山8 小时前
LeetCode 123:买卖股票的最佳时机 III
算法
haluhalu.9 小时前
初识 Protobuf:微服务跨语言通信的一份契约
java·c语言·开发语言·c++·python
Zane19949 小时前
写对二分查找有多难?Java集合框架的作者也曾栽在一行mid计算上
算法
Lokey8689 小时前
transformer结构
算法
罗斯8399 小时前
EMBER恶意软件基准数据集
人工智能·算法·安全·网络安全
longxuan019 小时前
倍增算法详解
c++·st表·倍增算法