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

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)

相关推荐
前端小L5 小时前
贪心算法专题(十五):借位与填充的智慧——「单调递增的数字」
javascript·算法·贪心算法
前端小L5 小时前
贪心算法专题(十四):万流归宗——「合并区间」
javascript·算法·贪心算法
1001101_QIA5 小时前
【C++笔试题】递归判断数组是否是递增数组
开发语言·c++
hans汉斯5 小时前
基于数据重构与阈值自适应的信用卡欺诈不平衡分类模型研究
大数据·算法·机器学习·重构·分类·数据挖掘·机器人
ZPC82105 小时前
FANUC 机器人 PR 寄存器
人工智能·python·算法·机器人
yong99905 小时前
超宽带系统链路 MATLAB 仿真
开发语言·算法·matlab
企鹅侠客6 小时前
第06章—实战应用篇:List命令详解与实战(上)
数据结构·windows·redis·list
历程里程碑6 小时前
LeetCode 560题:和为K子数组最优解
算法·哈希算法·散列表
qq_401700416 小时前
C/C++中的signed char和unsigned char详解
c语言·c++·算法
leoufung6 小时前
LeetCode 67. Add Binary:从面试思路到代码细节
算法·leetcode·面试