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

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)

相关推荐
Yupureki1 分钟前
从零开始的C++学习生活 20:数据结构与STL复习课(4.4w字全解析)
c语言·数据结构·c++·学习·visual studio·1024程序员节
REDcker8 分钟前
C++项目 OpenSSL 依赖最佳实践
开发语言·c++
一念&12 分钟前
每日一个C语言知识:C 错误处理
c语言·开发语言·算法
qq_28161795332 分钟前
MSVC 链接器处理input file的逻辑
c++
FMRbpm33 分钟前
顺序表vector--------练习题3题解
数据结构·c++·新手入门
郝学胜-神的一滴36 分钟前
Qt删除布局与布局切换技术详解
开发语言·数据库·c++·qt·程序人生·系统架构
buyue__1 小时前
C++实现数据结构——线性表
数据结构·c++
fantasy5_52 小时前
手撕vector:从零实现一个C++动态数组
java·开发语言·c++
兜兜风d'2 小时前
RabbitMQ死信队列详解
c++·rabbitmq·java-rabbitmq
丁浩6662 小时前
统计学---2.描述性统计-参数估计
人工智能·算法