二分法优化

简介:

1,基本的二分思想:

int BinarySearch(int a[],int size,int key)
{
   int L = 0; //查找区间的左端点
   int R = size - 1; //查找区间的右端点
   while( L <= R) { //如果查找区间不为空就继续查找
   int mid = L+(R-L)/2; //取查找区间正中元素的下标
   if( key == a[mid] )
       return mid;
   else if( key > a[mid])
       L = mid + 1; //设置新的查找区间的左端点
   else
       R = mid - 1; //设置新的查找区间的右端点
   }
   return -1;
}

其实:L+(R-L)/2=(R+L)/2

为了防止(L+R)溢出,才这样写(出于ACM的需要)


2,将L  R的初始化边界扩展1

int internalFor(int a[], int l, int r, int key) {//二分法查找a[] l到r区间的某个值
	int L = l - 1;
	int R = r + 1;
	int mid;
	while (R - L > 1) {//不能设置等于
		mid = L + (R - L) / 2;
		if (a[mid] > key) {
			R = mid;
		}
		if (a[mid] < key) {
			L = mid;
		}
		if (a[mid] == key) {
			return mid;
		}
	}
	return -1;
}

3,二分算法用于不等式范围查找:

int bs_nomorethan(int a[], int l, int r, int key) {//寻找小于等于key的元素的个数
	int L = l - 1;
	int R = r + 1;
	int mid;
	while (R - L > 1) {
		mid = L + (R - L) / 2;
		if (a[mid] <= key) {
			L = mid;
		}
		if (a[mid] > key) {
			R = mid;
		}
	}
	return L;
}

4,基于二分法思想的左右线性移动查找:

void ArrayTwoNumberAdd(int a[], int size,int sum) {//使用两边移动桶的方式,进行对数组的两个数之和进行判断
	int L = 0;
	int R = size - 1;
	int num = 0;
	while (L <= R) {
		if (a[L] + a[R] > sum) {
			R--;
		}
		if (a[L] + a[R] < sum) {
			L++;
		}
		if (a[L] + a[R] == sum) {
			cout << a[L] << "+" << a[R] << "=" << sum << endl;
			L++;
			R--;
			num++;
		}
	}
	cout << "总共有个:" << num << "对" << endl;
}


相关文章
|
存储 缓存 分布式计算
阿里云服务器2核16G、4核32G、8核64G配置最新收费标准及活动价格参考(2024更新)
2核16G、8核64G、4核32G配置的云服务器处理器与内存比为1:8,这种配比的云服务器一般适用于数据分析与挖掘,Hadoop、Spark集群和数据库,缓存等内存密集型场景,因此,多为企业级用户选择,目前用户购买2核16G配置活动价格最低为1473.41元/1年起,购买4核32G配置活动价格最低为2896.42元/1年起,购买8核64G配置活动价格最低为5742.43元/1年起,本文介绍这些配置的最新购买价格,包含原价收费标准和最新活动价格。
1359 1
阿里云服务器2核16G、4核32G、8核64G配置最新收费标准及活动价格参考(2024更新)
|
域名解析 运维 网络协议
Linux命令行全景指南:从入门到实践,掌握命令行的力量
Linux命令行全景指南:从入门到实践,掌握命令行的力量
583 0
|
开发工具 git Windows
VSCode下载与安装使用教程【超详细讲解】
VSCode下载与安装使用教程【超详细讲解】
5392 0
VSCode下载与安装使用教程【超详细讲解】
|
10月前
|
传感器 人工智能 搜索推荐
从“应答工具”到“认知伙伴”:解析教育服务机器人的核心技术架构
人工智能驱动教育机器人迈向智能化,通过GraphRAG、边缘多模态感知与长时记忆技术,实现精准教学、复杂环境适应与情感交互。从助教到学伴,机器人正深度融合于教育全场景,推动个性化学习与产教融合,开启智能教育新范式。(239字)
|
人工智能 搜索推荐 小程序
分享技术---AI智能题库考试系统
本平台融合AI智能技术,打造高效试题库系统,支持PC、手机在线刷题,提供智能出题、自动解析、错题回顾等功能,提升学习效率。具备章节练习、背题模式、笔记收藏等多样化学习方式,支持全终端同步,助力学员精准突破薄弱环节,快速提分。
|
存储 人工智能 大数据
云栖2025|阿里云开源大数据发布新一代“湖流一体”数智平台及全栈技术升级
阿里云在云栖大会发布“湖流一体”数智平台,推出DLF-3.0全模态湖仓、实时计算Flink版升级及EMR系列新品,融合实时化、多模态、智能化技术,打造AI时代高效开放的数据底座,赋能企业数字化转型。
3282 0
|
SQL 存储 JavaScript
如何开发人事管理系统中的招聘管理板块?(附架构图+流程图+代码参考)
本文介绍了企业人事管理系统中招聘管理模块的设计与开发,涵盖职位发布、简历筛选、面试跟进、Offer管理等全流程数字化内容。文章详细解析了模块架构、业务流程、核心开发技巧,并提供了示例代码和实现效果展示,同时解答了落地实施中的常见问题,助力企业高效构建招聘管理体系。
|
数据库 Windows
D盘被删除了咋恢复丢失的文件?手把手教你找回宝贵资料
本文详解D盘误删后的文件恢复方法,涵盖三种实用方案:备份还原、专业工具扫描及联系数据恢复服务。强调操作前的关键注意事项,助你高效找回重要资料。
|
人工智能 物联网 测试技术
智能化测试基础架构:软件质量保障的新纪元
本文介绍了智能化测试基础架构的核心构成与优势。该架构融合AI、领域工程与自动化技术,包含智能测试平台、测试智能体、赋能引擎和自动化工具链四部分,能自动生成用例、调度执行、分析结果,显著提升测试效率与覆盖率。其核心优势在于实现专家经验规模化、质量前移和快速适应业务变化,助力企业构建新一代质量保障体系。建议从构建知识图谱和试点关键领域智能体起步,逐步推进测试智能化转型。
|
SQL NoSQL Shell
03 MongoDB文档的各种增加、更新、删除操作总结
文章总结了MongoDB中文档的增删改操作,包括插入文档、更新现有文档以及删除文档的具体方法和示例。
1314 0