二分查找法

c++二分查找法 二分查找法是从区间[i,j]上连续不断将sum(a)·sum(b)<0的函数ans=sum(x),通过循环实现把函数sum(x)的0点所在区间一分为二,如此循环,使区间[i,j]的两个端点逐渐像0点靠近,得到0点近似值的方法。可以实现空间优化,适用于数据较大的题目。时间复杂第O(log(2n))。 在使用c++的二分查找法,要先将数据排序,二分查找法的基本思想可以这样总结:我们设数据是按升序... 阅读详情
// 二分查找,返回和目标相等的元素下标
int binary_find(std::vector<int>& vec, int target) {
	int left = 0;
	int right = vec.size()-1;
	while(left<=right){
		// 若 left+right超出int范围
		// int mid = (left+right)/2; 
		int mid = left + (right-left)/2;
		if (vec[mid] < target) left = mid+1;
		else if (vec[mid] > target) right = mid-1;
		else return mid;
	}
	return -1;
}


// 二分查找,数组中有会出现重复元素,返回最左边第一个和目标相同元素的下标
int binary_find(std::vector<int>& vec, int target) {
	// 使用二分查找,加线程遍历
	int left = 0;
	int right = vec.size()-1;
	int mid = 0;
	while(left<=right){
		mid = left + (right-left)/2;
		if (vec[mid] < target) left = mid+1;
		else if (vec[mid] > target) right = mid-1;
		else {
			break;
		};
	}
	// 线性时间复杂度O(n)
	for (int i = 0; i<=mid; i++)  {
		if (vec[i] == target) return i;
	}
	return -1;
}



// 二分法,数组中有会出现重复元素,返回最左边第一个和目标相同元素的下标
int binary_find(std::vector<int>& vec, int target) {
	int left = 0;
	int right = vec.size()-1;
	int mid = 0;
	while(left<=right){
		mid = left + (right-left)/2;
		if (vec[mid] < target) left = mid+1;
		else if (vec[mid] > target) right = mid-1;
		else {
			right = mid -1; // 缩小右边边界,再次二分查找
		};
	}
	// i == vec.size(); 数组为空
	if (i == vec.size() || vec[i] != target) return -1;
	return i; // i和j相等
}
二分查找法(递归和非递归实现) 二分查找发:      二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。(借鉴百度百科)时间复杂度为:log2n,即log以2为底,n的对数。      1.递归方式完成二分查找法:         /** * 递归方法实现二分查找法. * @p 阅读详情

相关推荐

c语言 二分查找法 及二分查找法的时间复杂度。

二分查找法是用来查找数组中指定的那个元素。使用二分查找的前提是数组是有序的。(这里我们假设是升序) 在现实生活中,我们要猜一个区间内的数字,比如1~10之间,我们通常会猜它的中间数5,再根据要猜的数和这个中间数作比较,从而达到缩小区间的目的,提高我们猜中的几率。 这里我们假设数组arr={1,2,3,4,5,6,7,8,9,10},里面有10个元素,我们要找到7。在c语言中,数组首元素下标是从0开始,即1,2,3,4,5,6,7,8,9,10 ...

weixin_56931868的博客 1633

c语言实现二分查找法

目录 一.前言 二.二分查找法 1.什么是二分查找法 2.如何用c语言来实现二分查找法 三.总结 一.前言 假如今天我们需要在一个有序的数组中来寻找一个数的下标,就用"1,2,3,4,5,6,7,8,9"这九个数组成的数组来说,假如我们想寻找'2',那很简单我们只用从小到大开始寻找,寻找两次就完成了,但是我们想寻找'7',我们继续用从小到大挨个寻找,这就显得有点慢并且耗时长还没有效率,因此我们可以有一种全新的方法,二分查找法来解决这个问题。 二.二分查找法 1.什么是二分查找法 二分查找

weixin_64448174的博客 1万+

计算机入门必备算法——二分查找法

1、引言 笔者对于计算机的研究一直停滞不前,近期想对一些算法进行复习和进一步的研究,每天都会更新一个新的算法,算法有难有易,层层递进。不希望能学的有多么高深,只希望在一些最基本的算法上有编码的思路,或者在一些生产环境中会应用一些算法来解决实际问题。 就比如今天要介绍的第一个查找算法——二分查找法。假设要在电话薄中找一个名字为K开头的人,很习惯的办法就是从头开始翻页,直到进入以K打头的部分。但是这种方法的缺陷就是要逐一查找,时间较长。 于是我们可以有另外一个思路就是每次从中间开始查找,而以K打头的名字就

qq_37036915的博客 531

Java算法之二分查找法

本章介绍Java实现二分查找法,欢迎各位同学转载,但转载务必注明出处:https://blog.youkuaiyun.com/qq_35101450/article/details/89194473,谢谢~ 什么是二分查找法 二分查找法也叫折半查找法,是一种效率比较高的查找方法,它要求被查找的数组是有序的。 二分查找原理 案例:大家应该都玩过猜数字游戏吧,比如我们要从1到100找出某一个数,一般我们会...

科科然的博客 1812

Python实战:用MOOTDX库轻松抓取股票分时数据并绘制专业图表(附完整代码)

本文详细介绍了如何使用Python的MOOTDX库获取股票分时数据,并通过Pandas进行数据清洗与VWAP计算,最后利用Matplotlib绘制包含价格线、均线和成交量的专业分时图。文章提供了从环境搭建、数据获取到可视化呈现的完整代码,帮助读者快速构建本地化的股票分时数据分析工具。

weixin_29041195的博客 475

01 Python学习总结:Python简介及入门

Python 是一门高级编程语言,以其简洁、易读和强大的功能而广受欢迎。它适用于多种应用场景,包括 Web 开发、数据分析、人工智能、自动化脚本等。以下是 Python 的简介及入门知识总结,帮助你快速了解并开始学习 Python。

数据知道的博客 1万+

二分查找法详解,解析二分查找法

作者最近突然想到了二分查找法,今天进拿出来跟大家分享一下 二分查找法顾名思义就是把列表分成两份进行查找,即先定义个最小下标start=0和一个最大下标end = len(list),然后通过相加对2求余或者除以2在转换为int类型转换为整数,这个随心而定,即center=(start+end)//2或者center=int((start+end)/2)然后得到list[center]的值,判断它...

z_xiaochuan的博客 2526

ASPICE标准快速掌握「总目录」

欢迎大家来到雪云飞星的《ASPICE标准快速掌握》,开始前博主先列出本专栏学习的大纲,同时这也可以作为大家学习ASPICE协议知识点的参考。本专栏可以帮助大家快速掌握如何在项目中使用ASPICE,ASPICE的学习通常仅需要半天时间左右,掌握方法后完全就可以结合快查表来指导具体项目的质量提升了。

雪云飞星的博客 3012

数组二分查找法

数组二分查找法 1.二分查找法思想 二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;如果x<a[n/2],则只要在数组a的左半部分继续搜索x,如果x>a[n/2],则只要在数组a的右半部搜索x. 2.二分查找法示例 public class MindArray { public static void ...

Bruce小鬼 2028

使用自己的数据跑通mmsegmentation

使用自己的数据跑通mmsegmentation,解决以下报错:1)type object 'FileClient' has no attribute 'infer_client' 2)It is expected output_size equals to 2, but got size 3 3)训练测试结果报NAN 4)KeyError: 'MyDataset is not in the dataset registry' 5)预训练模型和加载的网络结构层名有差异,unexpected key .....

猫猫与橙子的博客 1657

电容式三点式振荡电路/电感式三点振荡电路基础知识及Multisim电路仿真

摘要:三极管振荡电路利用放大特性与正反馈实现自激振荡,需满足巴克豪森条件(增益≥1,相位匹配)。核心由放大级、反馈网络、选频网络和稳幅环节构成。主要分为三类:1)LC/RC正弦波振荡电路(如电容三点式、电感三点式),输出高频/低频正弦波;2)多谐振荡电路,通过电容充放电产生方波;3)张弛振荡电路,生成锯齿波等。设计需关注相位匹配、增益控制和元件适配。LC振荡频率由谐振参数决定,RC振荡由时间常数控制。稳幅机制通过非线性或主动元件维持等幅输出。该电路在信号发生、时钟源等领域有广泛应用。

XU157303764的博客 2042

java:二分查找法

工作原理 它又被称之为折半查找法。将数组中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将数组分成前、后两个子数组,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子数组,否则进一步查找后一子数组。重复以上过程,直到找到或找不到位置。 与线性查找法的对比 线性查找法遍历数组中的每一个元素,从一段开始逐一检查每个元素,直到找到所需元素位置。 二分查找法则不...

安利不求人 530

微信小程序转发功能异常报错 由于小程序违规分享功能暂时无法使用的解决办法

小程序右上角转发功能被封,不代表你违规了,而可能是你没认证、没备案!很多功能都是“先合规、后开发”,踩坑就晚了,别像我一样绕了三圈才发现问题。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 2623

二分查找法之GGBond版

文章目录一、什么是二分查找法?二、使用思路 题目:利用二分查找法,查找一个有序整数数组中的目标值的下标。 一、什么是二分查找法? 二分查找法又称折半查找法,是一种在有序整数数组中查找目的元素的一种方法。 二、使用思路 1.找到左值head和右值end 2.中值middle=(head+end)/2 3.如果中值等于目标值则直接输出答案,否则判断目标值在左域还是右域(因为是有序数组,所以通过大小就可以判断啦) 4.若目标值在左域(右域),只需将右值(左值)替换为中值,继续进行相同操作即可。 代码如下: #.

qq_49729886的博客 1027

Python实战:打造学生信息管理系统

通过本教程,我们构建了一个简单的学生信息管理系统,实现了基本的添加、删除、修改和查询功能。当然,这个系统还有很多可以改进和扩展的地方,比如添加用户界面、增加数据持久化功能、支持批量操作等。简介:本文将介绍如何使用Python编写一个功能齐全的学生信息管理系统,包括添加、删除、修改和查询学生信息的基本操作。学生信息管理系统是学校日常管理中不可或缺的一部分,它能够帮助管理人员快速、准确地管理学生信息,提高工作效率。为了实现上述功能,我们可以设计一个包含学生信息的字典,并使用函数来封装各个操作。

铭渊老黄 1492

STM32驱动HC-SR04超声波模块

本篇文章将带大家使用HAL库驱动HC-SR04超声波模块。超声波模块作为智能小车必备的模块,要学习智能小车的同学是必须掌握好这个模块的使用的。HC-SR04是一种常用的超声波传感器模块,也被称为超声波测距模块,广泛应用于各种自动化控制和测距系统中。它通常由超声波发射器、接收器、控制电路和外壳组成,可以实现非接触式的距离测量。下面是HC-SR04超声波模块的一些特性和技术参数:距离测量范围:2cm ~ 400cm(可调)。测量精度:0.3cm。工作电压:DC 5V。工作电流:15mA。

m0_49476241的博客 7686

Java实现二分查找法

对于无序的数组,二分查找法是行不通的,因为二分查找法的前提条件就是:有序。 代码: /** * 二分查找的实现 * * @param array 待查找的数组 * @param searchNum 待查找的数字 * @return 查找的结果,为正数的时候,表示下标,-1表示没找到 */ static int binarySearchImpl(int[] array, int searchNum) { int low = 0; int high = array.length - 1; in

weixin_45673552的博客 227

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

算法:你不知道的二分查找法的那些事

jk

Adorablenewbaby的博客 367

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

java 二分查找法

二分查找法,又称折半查找法,其算法思想是: 在有序的序列,每次都是以序列的中间位置的数来与待查找的关键字进行比较,每次缩小一半的查找范围,直到匹配成功。值得注意的是,数组必须是有序的,如果是无序数组二分查找法就会出错,这也算是二分查找法的缺点之一。 public class Test001 { public static Integer count = 0; public stat...

91奔跑的蜗牛 212

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

java二分查找法_java算法-二分查找法

二分查找法的前提是数据必须是有序排列的数据,如果不是那将失去二分查找法的意义。其中二分查找法有两种实现方式while、递归方法实现。下面我们来看下它的代码。public class maxtest {public static void main(String[] args) {//###################二分查找法start###################//int[] ar...

weixin_42169674的博客 411
上一篇: 腐烂橘子图问题
下一篇: gdb调试
最后冰吻free
博客等级 码龄12年 121粉丝 371原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值