C程序训练:二分查找法的应用之2

本文来自:C程序训练:二分查找法的应用之2

在《C程序训练:二分查找法的应用》一文中介绍了利用二分查找计算某个区间中数的个数,本文介绍利用二分查找法计算数列中出现单个数字的位置。题目描述如下。

题目描述:一维整型数组a有N个(N是奇数)元素,其中有一个元素值只出现一次,其余元素值都出现2次,且相邻。例如a[]={3,3,1,1,7,7,4,4,8}。值为8的元素只出现一次,其余元素值都出现了2次,且相邻。函数int find(int a[])的功能是使用二分查找方法,找出这个只出现一次的元素,并返回该元素的下标。编写程序找出这个数。设N<1000。

输入格式:

第一行读入一个整数n,表示a中元素个数。

第二行读入n个整数表示数组a。

输出格式:

输出找到的元素的位置和元素值。

样例1输入:

9

3 3 1 1 7 7 4 4 8

样例1输出:       

8 8

样例2输入:

11

5 5 -1 -1 -2 0 0 11 11 10 10

样例2输出:       

4 -2

编程思路:

假设所有元素都出现两次且相邻,那么我们可以按照一定的节奏给它们编号,这个节奏就是0,1,0,1,……也就是说,当元素第一次出现时我们称之为0,第二次出现时称之为1。由于这些元素是相邻的,所以我们可以通过0和1的交替来给它们打上节拍。

假设其中有一个元素丢失,那么,上述节奏被打乱了。因此我们可以按照二分查找来找到这个元素。例如,数据如下表所示:

图片

前面成双成对的都是0、1,0、1这样的节奏对应的数据都是相等的,当8出现时,打破了这个僵局。所以我们在设计算法时,第一次查寻如下图所示,mid是偶数,所指元素如果仍保留这种节奏,下一次查寻区间在mid+2与up之间查找,否则,查找区间在low与mid之间。针对该示例,应在mid+2与up之间查找。

图片

继续查找,如下图所示。这时mid指向奇数位置,该位置的值与它上一个值比较,如果仍保持这种节奏,下一次查找区间应该在mid+1与up之间,否则,查找区间应在low与mid之间。该示例应该在low与mid之间。

图片

继续查找,如下图所示。发现low<up不成立,查找结束,low或up即为找到的元素。

图片

再举一个例子,只提供图,不再描述。

图片

图片

图片

图片

按上述思路编写程序即可。

源程序如下:

#include <stdio.h>int find(int a[],int n)
{int low,up,mid;low=0;up=n-1;while(low<up){mid=low+(up-low)/2;if(mid%2==0)if(a[mid]==a[mid+1])low=mid+2;elseup=mid;else if(a[mid-1]==a[mid])low=mid+1;elseup=mid-1;}return low;
}int main()
{int n;int a[1000];scanf("%d", &n);for (int i = 0; i < n; i++)scanf("%d", &a[i]);  int position = find(a,n);printf("%d %d\n", position, a[position]);return 0;
}

参考资料

[1]李红卫,李秉璋. C程序设计与训练(第四版)[M],大连,大连理工大学出版社,2023.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2775246.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Java基础常见面试题总结-并发(一)

线程池 线程池&#xff1a;一个管理线程的池子。 为什么平时都是使用线程池创建线程&#xff0c;直接new一个线程不好吗&#xff1f; 嗯&#xff0c;手动创建线程有两个缺点 不受控风险频繁创建开销大 为什么不受控&#xff1f; 系统资源有限&#xff0c;每个人针对不同业…

秘塔科技推出AI搜索产品「秘塔AI搜索」

近日&#xff0c;国内一家人工智能科技公司&#xff08;秘塔科技&#xff09;推出了一款AI搜索产品——秘塔AI搜索&#xff0c;能够大幅提升搜索效率&#xff0c;解决日常生活、工作学习等场景中遇到的各类搜索需求。 秘塔AI搜索官网&#xff1a;https://metaso.cn/ 相较于传统…

unity-ios-解决内购商品在Appstore上面已配置,但在手机测试时却无法显示的问题

自己这几天用 unity 2021 xcode 14.2 开发ios内购&#xff0c;appstore上面内购商品都已经配置好了&#xff0c;但是在手机里就是不显示&#xff0c;最后才发现必需得满足以下条件才行&#xff1a; 1. Appstore后台 -> 内购商品 -> 商品状态必需为『准备提交』以上状态…

宏观行业心得

OLAP的特点 电商这样的OLTP场景大家更熟悉。相比之下&#xff0c;OLAP的特点&#xff1a; 读相对多&#xff0c;1000row以上大批写入&#xff0c;不改已有数据查询时输出很多行、很少列&#xff0c;结果被过滤或聚合后能够在一台服务器的内存中单台服务器qps数百&#xff0c;…

编曲入门软件哪个好 编曲入门教程 Studio One哪个版本好 Studio One6.5正版多少钱 FL Studio下载

新手编曲软件推荐&#xff1f;新手学编曲要先熟悉编曲逻辑&#xff0c;因此需要选择编曲逻辑简明易懂的宿主软件。编曲新手应该做哪些准备&#xff1f;准备好编曲设备、宿主软件、基础乐理学习资料。 一、编曲入门软件哪个好 新手入门阶段还没有形成系统的编曲思维&#xff0…

C++面试宝典第27题:完全平方数之和

题目 给定正整数 n,找到若干个完全平方数(比如:1、4、9、16、...),使得它们的和等于n。你需要让组成和的完全平方数的个数最少。 示例1: 输入:n = 12 输出:3 解释:12 = 4 + 4 + 4。 示例2: 输入:n = 13 输出:2 解释:13 = 4 + 9。 解析 这道题主要考察应聘者对于…

公众号流量主生意,月入五万?

自从公众号开放了公域流量&#xff0c;流量蹭蹭蹭往上帽。 前几年的公众号是没有算法机制这一说的。 常见问题&#xff1a; 一个人能注册几个公众号&#xff1f; 从腾讯最新公告来看&#xff0c;目前为此个人身份证可注册1个公众号&#xff08;须绑定一张银行卡&#xff09;…

计算机网络基本知识(一)

文章目录 概要速率带宽、吞吐量带宽吞吐量 时延发送&#xff08;传输&#xff09;时延传播时延排队时延处理时延时延带宽积 利用率 概要 速率、带宽、吞吐量、时延、利用率 速率 记忆要点&#xff1a;10的三次方 记忆要点&#xff1a;2的10次方 带宽、吞吐量 带宽 单位&…

机器学习系列——(十七)聚类

引言 在当今数据驱动的时代&#xff0c;机器学习已经成为了解锁数据潜能的关键技术之一。其中&#xff0c;聚类作为机器学习领域的一个重要分支&#xff0c;广泛应用于数据挖掘、模式识别、图像分析等多个领域。本文旨在深入探讨聚类技术的原理、类型及其应用&#xff0c;为读…

L1-088 静静的推荐

一、题目 二、解题思路 如果有的学生天梯赛成绩虽然与前一个人相同&#xff0c;但其参加过 PAT 考试&#xff0c;且成绩达到了该企业的面试分数线&#xff0c;则也可以接受——同一批次这样的人可以有多个&#xff01;&#xff01;&#xff01;如果 pta 分数不低于 175 &#…

C#用Array类的Reverse方法反转数组中元素

目录 一、Array.Reverse 方法 1.重载 2.Reverse(Array, Int32, Int32) 3. Reverse(Array) 4.Reverse(T[]) 5. Reverse(T[], Int32, Int32) 二、实例 1.Array.Reverse 方法4种重载方法综合实例 2.Reverse(Array)方法的实例 一、Array.Reverse 方法 反转一维 Array 或部…

PKI - 05 证书申请步骤

文章目录 Pre概述第一步:时间同步第二步: 部署证书服务器第三步: 客户端产生密钥第四步: 验证证书服务器第五步: 申请个人证书第六步&#xff1a; 审核并签名证书第七步: 颁发数字证书第八步: 交换公钥 Pre PKI - 02 对称与非对称密钥算法 PKI - 03 密钥管理&#xff08;如何…

Stable Diffusion 模型下载:majicMIX fantasy 麦橘幻想

文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十下载地址模型介绍 非常推荐的一个非常绚丽、充满幻想的大模型,由国人“Merjic”发布,下载量颇高。这个模型风格炸裂,远距离脸部需要inpaint以达成最好效果。 条目内容

【GameFramework框架】四、GameFramework框架内置模块

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 【GameFramework框架】系列教程目录&#xff1a; https://blog.csdn.net/q7…

IP地址查询的应用与意义

在数字化时代&#xff0c;IP地址已成为连接我们与网络世界的纽带之一。通过IP地址查询&#xff0c;我们可以揭开数字世界的面纱&#xff0c;了解更多有关网站、用户和网络活动的信息。本文将探讨IP地址查询的应用场景、意义以及其在网络安全、个人隐私保护和地理定位服务中的作…

Redis篇之分布式锁

一、为什么要使用分布式锁 1.抢劵场景 &#xff08;1&#xff09;代码及流程图 &#xff08;2&#xff09;抢劵执行的正常流程 就是正好线程1执行完整个操作&#xff0c;线程2再执行。 &#xff08;3&#xff09;抢劵执行的非正常流程 因为线程是交替进行的&#xff0c;所以有…

Java学习17-- super类

重点&#xff1a;super类 & 方法重写 super类 super指的是本级的上一级&#xff0c;即father class父类 很好理解&#xff0c;比如Person class>Student class 当前在Student class执行&#xff0c;那么就写this.xxx 需要在Student程序里面调用Person&#xff0c;那就…

unity——ScriptableObject相关知识点【学习笔记/不足之处欢迎斧正/个人复习向/侵删】

一、相关简介 1.ScriptableObject是什么&#xff1a;Unity提供的一个数据存储基类 2.ScriptableObject的好处有哪些&#xff1a;文件配置、数据复用、更好的处理数据带来的多态性为 二、ScriptableObject的创建 1.自定义ScriptableOject数据容器 继承ScriptableObject类 在…

二十多篇文献带你读懂分布式学习与联邦学习优化思路 调度优化 压缩算法 聚合算法

前言 文中增加了引用跳转&#xff0c;如果想要细度哪一篇文章&#xff0c;只需通过引用跳转到结尾的Reference便可以获得文章的标题&#xff0c;通过Google Scholar搜索便可以获取原文。 本文为作者原创&#xff0c;转载请注明作者kaiserqzyue。 摘要 联邦学习的提出是为了…

Spring GateWay

概述简介 能干什么 反向代理 鉴权 流量控制 熔断 日志监控 Spring Cloud Gateway 与Zuul的区别 在SpringCloud Finchley正式版之前&#xff0c;Spring Cloud推荐的网关是 Netflix提供的Zuul: 1、Zuul 1.x&#xff0c;是一个基于阻塞Ⅳ/O的APl Gateway 2、Zuul 1.x基于Servl…