C——找单身狗2

题目内容:

在一个数组中,室友两个数字出现了一次,其他所有数字都出现了两次。找出只出现一次的数字。

如:1,2,3,4,5,1,2,3,4,6             5 和6都只出现了一次,找出5和6打印出来

 解题思路:

这里还是要用到异或运算符 ^来解决。不过和单身狗1不一样的是,整个数组异或下来,会出现一个别的值,是由5^6得到的。这里我们找新得到的值的二进制位的1在哪里。

注意,异或运算符是两个数的二进制位对应位相同结果为1,不同为0 ,可以用这点来将两个不同的数字分成两个不同的组,然后在分别异或每个组。

 1、找出整体异或的结果

int tmp = 0;
int i = 0;
//将整个数组异或起来,得到两个不同数字的异或结果
for (i = 0; i < n; i++)
{
	tmp ^= arr1[i];
}

2、找到tmp中,二进制为1 的某一位k

tmp 可能是 0001  0010 0100,所以我们要用到右移运算符 >>

int k = 0;
for (i = 0; i < 32; i++)
{
	if (((tmp >> i) & 1) != 0)
	{
		k = i;
		break;
	}
}

3、将k位上为1的分为一组遍历异或,最后的值存储到p1或p2中

* p1 = 0;
* p2 = 0;
for (i = 0; i < n; i++)
{
	if (((arr1[i] >> k) & 1) != 0)
	{
		*p1 ^= arr1[i];
	}
	else
	{
		*p2 = arr1[i];
	}
}

最后来看看完整代码吧

#include <stdio.h>

void Fund(int arr1[], int n, int* p1, int* p2)
{
	int tmp = 0;
	int i = 0;
	//将整个数组异或起来,得到两个不同数字的异或结果
	for (i = 0; i < n; i++)
	{
		tmp ^= arr1[i];
	}
	//2、找到tmp中,二进制为1 的某一位k
	int k = 0;
	for (i = 0; i < 32; i++)
	{
		if (((tmp >> i) & 1) != 0)
		{
			k = i;
			break;
		}
	}
	//3、将k位上为1的分为一组遍历异或,最后的值存储到p1或p2中
	* p1 = 0;
	* p2 = 0;
	for (i = 0; i < n; i++)
	{
		if (((arr1[i] >> k) & 1) != 0)
		{
			*p1 ^= arr1[i];
		}
		else
		{
			*p2 = arr1[i];
		}
	}
}

int main()
{
	int arr[] = { 1,2,3,4,5,1,2,3,4,6 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	int num1 = 0;
	int num2 = 0;
	Fund(arr, sz, &num1, &num2);
	printf("%d %d\n", num1, num2);
	return 0;
}

结果:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【ZBrush】制作章鱼练习 01——头部

目录 本篇效果 步骤 一、准备工作 二、制作头部外形 三、制作眼睛 本篇效果 步骤 一、准备工作 我们需要制作的模型如下 首先创建一个球体 点击编辑对象 点击“生成 多边形网格物体” 选择“MatCap Gray”材质&#xff0c;颜色设置为白色 要打开“Mrgb”通道和“绘制”选…

Vue - 你知道Vue组件中的data为什么是一个函数吗

难度级别:中高级及以上 提问概率:80% 在Vue项目中,App.vue下的每个子组件都会生成一个单独的Vue实例对象,但这些子对象都是通过通过vue.extend方法创建而来的,也就是说我们平时在项目中所定义的Vue组件,都有一个相同的父类对象。这样也就…

CSS 基础:设置背景的 5 个属性及简写 background 注意点

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。大专生&#xff0c;一枚程序媛&#xff0c;感谢关注。回复 “前端基础题”&#xff0c;可免费获得前端基础 100 题汇总&#xff0c;回复 “前端工具”&#xff0c;可获取 Web 开发工具合集 263篇…

实时计算平台设计方案:911-基于6U VPX的光纤图像DSP实时计算平台

基于6U VPX的光纤图像DSP实时计算平台 一、系统组成 该平台基于风冷式的 6U 6槽VPX图像处理平台&#xff0c;包括&#xff1a;计算机主板、计算机主板后板、存储板、图像信号处理板、图像信号处理板后板、图像光纤转接板、机箱背板及机箱组成。图1为系统背板结构示意图&…

TechTool Pro for Mac v19.0.3中文激活版 硬件监测和系统维护工具

TechTool Pro for Mac是一款专为Mac用户设计的强大系统维护和故障排除工具。它凭借全面的功能、高效的性能以及友好的操作界面&#xff0c;赢得了广大用户的信赖和好评。 软件下载&#xff1a;TechTool Pro for Mac v19.0.3中文激活版 作为一款专业的磁盘和系统维护工具&#x…

第八讲 Sort Aggregate 算法

我们现在将讨论如何使用迄今为止讨论过的 DBMS 组件来执行查询。 1 查询计划【Query Plan】 我们首先来看当一个查询【Query】被解析【Parsed】后会发生什么&#xff1f; 当 SQL 查询被提供给数据库执行引擎&#xff0c;它将通过语法解析器进行检查&#xff0c;然后它会被转换…

VueRouter的介绍:什么是路由呢?VueRouter的作用及使用,VueRouter的使用分为5个步骤和特定的2步

1.什么是路由呢&#xff1f; 路由就是路径和组件之间的映射关系&#xff0c;当我们路径变化的时候&#xff0c;就要切换对应的组件。 在前端中解决路径与组件之间的映射关系&#xff0c;官方提供了VueRouter这个插件 2.VueRouter的作用及使用 作用&#xff1a;修改地址栏路…

基于单片机手机屏蔽器系统仿真设计

**单片机设计介绍&#xff0c;基于单片机手机屏蔽器系统仿真设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机手机屏蔽器系统的仿真设计主要涉及到手机信号屏蔽的原理、单片机控制逻辑设计、仿真软件的选择与使用以…

太厉害了,不愧是字节出来的。

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 前段时间公司缺人&#xff0c;也面了许多测试&#xff0c;一开始瞄准的就是中级水准&#xff0c…

DolphinScheduler 答案整理,最新面试题

DolphinScheduler的架构设计是怎样的&#xff1f; DolphinScheduler的架构设计主要分为四个层次&#xff1a;前端界面层、API服务层、调度层和执行层。 1、前端界面层&#xff1a; 提供任务的定义、流程的设计、监控等功能&#xff0c;用户通过前端界面操作整个系统。 2、AP…

【AN】简单的实现点击播放影片剪辑再点击暂停的功能

动画故事背景 一个影片剪辑&#xff0c;里面做了一个动画。我希望影片剪辑一开始是暂停的&#xff0c;按钮点击后开始播放&#xff0c;再次点击就暂停&#xff01; 下图那个花瓣就是影片剪辑&#xff0c;里面有个掉落的路径引导动画&#xff01; 1.首先给花瓣影片剪辑一个实例…

恭贺格雷勒管业入围2024进口管道十大品牌

恭贺格雷勒管业入围2024进口管道十大品牌 2024进口管道十大品牌网络评选再次成功举办。格雷勒管道凭借优异的产品质量&#xff0c;再次成功入围。 格雷勒隶属于格勒菲德进出口贸易&#xff08;上海&#xff09;有限公司。德国【格雷勒】在总部德国杜塞尔多夫设置了专业实验室&a…

Master节点快照回退遇到的容器不存在的问题

这次遇到的问题说起来有点扯&#xff0c;k8s集群出了点问题&#xff0c;kuboard无法访问&#xff0c;查看容器状态后&#xff0c;初始问题简单的以为是kuboard出问题了&#xff0c;理论上来说重新安装kuboard即可&#xff0c; 由此问题引发的系统bug&#xff0c;导致master节点…

【算法】第二篇 大衍数列

导航 1. 简介2. 数列特征3. 代码演示1. 简介 大衍数列,来源于《乾坤谱》中对易传“大衍之数五十”的推论。主要用于解释中国传统文化中的太极衍生原理。数列中的每一项,都代表太极衍生过程中,曾经经历过的两仪数量总和。是中华传统文化中隐藏着的世界数学史上第一道数列题。…

本地运行大模型,需要什么样的配置?

本地运行大模型有多爽&#xff1f;只有用过了才知道。 那是一种顺畅、自由的感觉。 比如使用那些主流大模型&#xff0c;最常见的就是网络问题&#xff0c;如 IP 受限&#xff0c;或者服务器压力过大导致的延迟等等。 使用本地大模型&#xff0c;真的是像和人自然交谈那么顺…

LeetCode第十五题:三数之和【15/1000 python】

&#x1f464;作者介绍&#xff1a;10年大厂数据\经营分析经验&#xff0c;现任大厂数据部门负责人。 会一些的技术&#xff1a;数据分析、算法、SQL、大数据相关、python 作者专栏每日更新&#xff1a; LeetCode解锁1000题: 打怪升级之旅 LeetCode解锁1000题: 打怪升级之旅htt…

RabbitMQ 消息重复消费问题

RabbitMQ 消息重复消费问题 解决消息重复消费问题 解决消息重复消费问题 需要在消费端考虑消息的幂等性&#xff1a; 幂等性&#xff1a;对一个接口的多次调用和一次调用得到的结果都是一样的 使用数据库的唯一越苏保证幂等性。

应用程序无法正常启动怎么办,应用程序无法正常启动解决方法

电脑使用过程中会碰到各种问题&#xff0c;比如说&#xff0c;有些时候打开应用可能会失败&#xff0c;与此同时还会出现某些提示。最近有用户就遇到了打开软件就提示“应用程序无法正常启动0xc000007b”&#xff0c;这个问题是很常见的&#xff0c;一般是某部分组件损坏导致的…

LeetCode刷题之105. 从前序与中序遍历序列构造二叉树

文章目录 1.题目描述2. 分析2.1 前序遍历2.1.1 什么是前序遍历&#xff1f;2.1.2 前序遍历有什么特点&#xff1f; 2.2 中序遍历2.2.1 什么是中序遍历2.2.2 中序遍历有什么特点&#xff1f; 2.3 后序遍历2.3.1 什么是后序遍历&#xff1f;2.3.2 特点 2.4 总结 3. 解法 1.题目描…