C++ 算法——二分查找

news/2024/7/24 9:50:23 标签: 算法, C++, 二分查找

如果要你在一个升序序列中查找一个值的位置,你是否还会傻乎乎的用下面这个 O ( n ) \mathcal O(n) O(n) 的代码暴力查找,如果是,我告诉你,其实根本不用这么做。

int find(int a[],int n,int k) {
	for(int i=0;i<n;++i) if(a[i]==k) return i;
}

猜数字这个游戏大家都玩过吧,这里介绍以下规则:

  1. 一名玩家在一个范围内想出一个数。
  2. 这名玩家告诉其他玩家他所想的范围。
  3. 其他玩家在这个范围内猜数,若:
    • 猜中了:该玩家获胜
    • 没猜中:根据该玩家猜的数缩小范围,然后接着进行操作 2。对于缩小范围,设初始范围为 l ∼ y l\sim y ly,要猜的数为 n n n,猜的数位 n n n,若:
      • m < n m<n m<n,将范围缩小至 m ∼ r m\sim r mr
      • m > n m>n m>n,将范围缩小至 l ∼ m l\sim m lm

显然,想要最快猜到该数,就需要采用折半的方法去猜,每次都猜这个范围的中间数。二分查找也是一样,对于每一次查找,都判断中间的数与要找的数的大小关系,然后采取对应的操作。

需要注意的是,二分查找需要保证序列是升序的。

这里放个代码:

//循环版
int find(int a[],int n,int k) {
	int l=0,r=n-1;
	while(l<=r) {
		int mid=(l+r)/2;
		if(a[mid]>k) r=mid-1;
		else if(a[mid]<k) l=mid+1;
		else if(a[mid]==k) return mid;
	}
	return -1;
}
//递归版
int find(int a[],int n,int k,int l,int r) {
	if(l>r) return -1;
	int mid=(l+r)/2;
	if(a[mid]>k) return find(a,n,k,l,mid-1);
	else if(a[mid]<k) return find(a,n,k,mid+1,r);
	else if(a[mid]==k) return mid;
}

练习题:洛谷 link


http://www.niftyadmin.cn/n/5547006.html

相关文章

Echarts桑基图

关于Echarts的使用方法参考&#xff1a;vue2中echarts的使用_vue2中使用echarts-CSDN博客 实现效果&#xff1a; 代码&#xff1a; var sysT {"用采": #2D9BFF,"营销系统": #39BFFF,"ERP": #76C2FF,"财务管控": #5F57FC,"PMS&…

正则表达式-使用笔记

正则使用不当&#xff0c;会导致CPU飙升&#xff1b;场景区分&#xff0c;是判断存在还是提取内容&#xff1b;匹配范围&#xff0c;是匹配部分内容还是整行&#xff1b; 一、初识正则 正则表达式 – 语法 | 菜鸟教程 sparksql 正则匹配总结 https://www.cnblogs.com/he1m4n…

离线运行Llama3:本地部署终极指南_liama2 本地部署

4月18日&#xff0c;Meta在官方博客官宣了Llama3&#xff0c;标志着人工智能领域迈向了一个重要的飞跃。经过笔者的个人体验&#xff0c;Llama3 8B效果已经超越GPT-3.5&#xff0c;最为重要的是&#xff0c;Llama3是开源的&#xff0c;我们可以自己部署&#xff01; 本文和大家…

【7.29-1800】

B. Missing Subsequence Sum 题意&#xff1a;构造一个长度不超过 25 的序列&#xff0c;保证任意子集的和的集合为 { x ∣ 1 ≤ x < k a n d k < x ≤ n } \{x|1\leq x<k ~and ~ k<x\leq n\} {x∣1≤x<k and k<x≤n} 【不会解决空缺的问题&#xff0c;看…

gitee及git的简单使用、下载教(保姆级教程)

前言&#xff1a; GitHub&#xff0c;一个由外国研发的代码开源网站&#xff0c;我们可以通过它获得别人优秀的项目源码&#xff0c;也可以在上面上传自己的劳动成果。但是&#xff0c;我们很难访问外网。于是&#xff0c;我们将目光转向国内一个类似的网站---码云&#xff08…

探索多模态预训练:MAnTiS、ActionCLIP、CPT与CoOp的Prompt技巧

上一篇博文整理了 预训练新范式&#xff08;Prompt-tuning&#xff0c;Prefix-tuning&#xff0c;P-tuning&#xff09; &#xff0c;主要是围绕NLP上的成果&#xff0c;具体的概念本文也不做过多赘述。本篇文章将主要整理几篇有代表性的Prompt方法在多模态领域中的应用。 Mult…

【chatgpt】 PyTorch中reshape和view

在 PyTorch 中&#xff0c;reshape 和 view 都用于改变张量的形状&#xff0c;但它们在实现和使用上有一些重要的区别。理解这些区别对于在复杂的张量操作中选择合适的方法非常关键。 view 方法 连续性要求&#xff1a;view 方法要求原始张量在内存中是连续的。如果张量不是连…

Sql 导入到 Excel 工具

Sql 导入到 Excel 工具 这个VBA宏的步骤如下&#xff1a; 通过文件对话框选择SQL文件。读取文件内容。解析文件中的每一行&#xff0c;如果包含“insert into”&#xff0c;则提取表名。检查是否已经存在以表名命名的工作表&#xff0c;如果不存在则创建新的工作表。将数据插…