寻找单身狗

在一个数组中仅出现一次,其他数均出现两次,这个出现一次的数就被称为“单身狗“。

一.一个单身狗

我们知道异或运算操作符 ^ ,它的特点是对应二进制位相同为 0,相异为 1

由此我们容易知道两个相同的数,进行异或运算得到的结果一定为 0,0和非0数字异或的结果为非0数字,因此我们可以将数组中的所有元素都进行异或,出现过两次的数异或结果将为0,留下来的就是单身狗了。

代码实现:

int FindSingle(int* arr,int sz)
{int dog = 0;int i = 0;for (i = 0; i < sz; i++){dog ^= arr[i];}return dog;
}
int main()
{int arr[5] = { 1,4,2,1,2 };int sz = sizeof(arr) / sizeof(arr[0]);printf("单身狗为:%d\n", FindSingle(arr, sz));return 0;
}

二.两个单身狗

如果数列中存在两个单身狗,依然和上面一样全部进行异或运算显然是得不到答案的,相同的数通过异或消除了,得到的会是两个单身狗异或的结果。

能不能将两个单身狗分开,在两个数组中分别以上面的方式找出单身狗呢?

异或的条件是对应二进制位相同为 0,相异为 1。通过两个单身狗数异或的结果,我们可以得到两个单身狗数在某些二进制位上单身狗的值不同(0或1),可以通过这位上的值不同来将两个单身狗分开。

同样,对于出现过两次的非单身狗数,也可以通过判断某一二进制位相同,将其放入同一数组中,再对该数组进行异或运算后消除。

代码实现:

void FindSingle(int* arr, int sz,int* dog,int* dog1,int* dog2)
{int i = 0;for (i = 0; i < sz; i++){//全部异或得到两个单身狗的异或结果*dog ^= arr[i];}//两个单身狗数某二进制位上的值不同int pos = 0;for (i = 0; i < 4; i++){//dog的值为两个单身狗数异或的结果,dog的某一二进制位为1则代表两个单身狗在这一二进制位上不相等//找出这一位置并拷贝下来if (((*dog >> i) & 1) == 1){pos = i;break;}}//将数组按pos位上的值为1或0分组并求异或for (i = 0; i < sz; i++){if (((arr[i] >> pos) & 1) == 1){*dog1 ^= arr[i];}else{*dog2 ^= arr[i];}}
}
int main()
{int arr[10] = { 1,2,3,4,5,1,2,3,4,6 };int dog = 0;int dog1 = 0;int dog2 = 0;int sz = sizeof(arr) / sizeof(arr[0]);FindSingle(arr, sz, &dog, &dog1, &dog2);printf("单身狗1是:%d,单身狗2是:%d", dog1, dog2);return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

提示计算机丢失msvcp140.dll怎么办,缺少msvcp140.dll一键修复

在计算机使用过程中&#xff0c;我们可能会遇到各种稀奇古怪的问题。其中&#xff0c;msvcp140.dll 文件丢失算是比较常见的一种。那么&#xff0c;究竟什么是 msvcp140.dll 文件&#xff1f;它为什么会丢失&#xff1f;我们又该如何解决这个问题呢&#xff1f;本文将围绕这些问…

高性能计算环境下的深度学习异构集群建设与优化实践

★深度学习&#xff1b;模式识别&#xff1b;图像处理&#xff1b;人工智能建模&#xff1b;人工智能&#xff1b;深度学习算法&#xff1b;强化学习&#xff1b;神经网络&#xff1b;卷积神经网络&#xff1b;人工神经网络&#xff1b;VIBE算法&#xff1b;控制系统仿真&#…

1 MySQL 高级(进阶) SQL 语句(一)

目录 1 MySQL SQL 语句 1.1SELECT 1.2 DISTINCT 1.3 WHERE 1.4 AND OR 1.5 in 1.6 BETWEEN 2 通配符 ----通常通配符都是跟 LIKE 一起使用的 2.1 LIKE 2.2 ORDER BY 3函数 3.1数学函数 3.2 聚合函数 3.3 字符串函数 4 GROUP BY 4.1 HAVING 5 别名 6 子查询 …

NSS [HXPCTF 2021]includer‘s revenge

NSS [HXPCTF 2021]includer’s revenge 题目描述&#xff1a;Just sitting here and waiting for PHP 8.1 (lolphp). 题目源码&#xff1a;&#xff08;index.php&#xff09; <?php ($_GET[action] ?? read ) read ? readfile($_GET[file] ?? index.php) : inclu…

数字孪生在灌区信息中的应用

灌区信息是智慧水利的组成部分&#xff0c;对灌区现代化改造的支撑作用和地位尤为重要&#xff0c;对促进水利可持续发展有重要意义。灌区信息化系统主要对对灌区的水情、雨情、土壤墒情、气象等信息进行监测&#xff0c;对重点区域进行视频监控&#xff0c;同时对泵站、闸门进…

服务器搭建(TCP套接字)-fork版(服务端)

基础版的服务端虽然基本实现了服务器的基本功能&#xff0c;但是如果客户端的并发量比较大的话&#xff0c;服务端的压力和性能就会大打折扣,为了提升服务端的并发性能&#xff0c;可以通过fork子进程的方式&#xff0c;为每一个连接成功的客户端fork一个子进程&#xff0c;这样…

C#的属性讲解

文章目录 属性自动实现属性访问器内写逻辑属性不存储值其他文章 属性 在C#中&#xff0c;属性是一种特殊的成员&#xff0c;用于封装类的字段。它们提供了一种简洁和安全的方式来访问和设置类的状态和行为。 属性由两个访问器组成&#xff1a;get&#xff08;获取器&#xff…

【Java核心】JDK、JRE、 JVM的联系与区别

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ JDK、JRE、 JVM的联系与区别 1. 简述2. 是什么…

分类预测 | Matlab实现NGO-CNN-SVM北方苍鹰算法优化卷积支持向量机分类预测

分类预测 | Matlab实现NGO-CNN-SVM北方苍鹰算法优化卷积支持向量机分类预测 目录 分类预测 | Matlab实现NGO-CNN-SVM北方苍鹰算法优化卷积支持向量机分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现NGO-CNN-SVM北方苍鹰算法优化卷积支持向量机分类预…

MySQL查询(基础到高级)

目录 一、单表查询&#xff1a; 1.基本查询&#xff1a; 1.1 查询多个字段&#xff1a; 1.2 去除重复记录&#xff1a; 2. 条件查询&#xff1a; 2.1 语法 2.2 条件分类&#xff1a; 比较运算符&#xff1a; between..and..使用示例&#xff1a; ​编辑 in(..) 使用示例&…

webpack:详解代码分离以及插件SplitChunksPlugin的使用

文章目录 背景入口起点分离基本使用防重复 SplitChunksPlugin插件分离背景基本使用splitChunks.chunkssplitChunks.minChunkssplitChunks.minSizesplitChunks.maxSizesplitChunks.namesplitChunks.cacheGroupssplitChunks.cacheGroups.{cacheGroup}.prioritysplitChunks.cacheG…

【力扣每日一题】2023.9.24 LRU缓存

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 这又是一道程序设计类的题目&#xff0c;要我们实现LRU缓存的get和put操作。 简单说一下LRU缓存是什么&#xff0c;在我看来就是实用主义…

Nginx环境搭建、负载均衡测试

Nginx环境搭建、负载均衡测试 系统环境&#xff1a; win10&#xff0c;IDEA2020&#xff0c;JDK8 一、nginx环境搭建 1.ngxin下载 Nginx官网下载&#xff1a; http://nginx.org/en/download.html Nginx有三种版本&#xff0c;分别是Mainline version&#xff08;开发版&…

智慧公厕,公共厕所数字化促进智慧城市管理的成效

随着科技的不断进步和城市化的快速发展&#xff0c;城市管理也面临着新的挑战和机遇。而智慧公厕作为基层配套设施&#xff0c;通过数字化提升城市管理的效能&#xff0c;成为了现代智慧城市建设的重要一环。本文以智慧公厕领先厂家广州中期科技有限公司&#xff0c;大量项目案…

安装Linux虚拟机——以ubuntukylin-16.04.7-desktop-amd64.iso为例

正文 安装VMware 重要提示 安装软件之前&#xff0c;请先退出360、电脑管家等安全类软件&#xff0c;这类软件会阻止我们安装的软件进行注册表注册&#xff0c;很可能导致安装失败。确认物理机&#xff08;也就是你自己使用的电脑&#xff09;的防火墙已经关闭。 下载 打开…

深入学习 Redis - 分布式锁底层实现原理,以及实际应用

目录 一、Redis 分布式锁 1.1、什么是分布式锁 1.2、分布式锁的基础实现 1.2.1、引入场景 1.2.2、基础实现思想 1.2.3、引入 setnx 1.3、引入过期时间 1.4、引入校验 id 1.5、引入 lua 脚本 1.5.1、引入 lua 脚本的原因 1.5.2、lua 脚本介绍 1.6、过期时间续约问题&…

Linux系统上使用SQLite

1. 安装SQLite 在Linux上安装SQLite非常简单。可以使用包管理器&#xff08;如apt、yum&#xff09;直接从官方软件源安装SQLite。例如&#xff0c;在Ubuntu上使用以下命令安装SQLite&#xff1a; sudo apt-get install sqlite32. 打开或创建数据库 要打开或创建一个SQLite数…

2023华为杯数学建模D题第三问-碳排放路径优化(能源消费结构调整的多目标优化模型构建详细过程+模型假设(可复制))

1.碳排放约束下&#xff08;人为干预按时碳达峰与碳中和的基准情景&#xff09;能源消费结构多目标优化模型构建 1.1基本假设 本文的模型设计主要基于以下几个基本假设&#xff1a; &#xff08;1&#xff09;能源消费结构调整的根本驱动要素&#xff0c;是对投资耗费的最小化…

基于JAVA+SpringBoot+Vue+协同过滤算法+爬虫的前后端分离的租房系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 随着城市化进程的加快…

代码随想录|647. 回文子串,516.最长回文子序列

647. 回文子串 1.dp含义 dp[i][j]&#xff1a;表示区间范围[i,j] &#xff08;注意是左闭右闭&#xff09;的子串是否是回文子串&#xff0c;如果是,则dp[i][j]为true&#xff0c;否则为false。 2.dp递推公式 整体上是两种&#xff0c;就是s[i]与s[j]相等&#xff0c;s[i]与…