单身狗问题(初级)兼(升级版)

这篇具有很好参考价值的文章主要介绍了单身狗问题(初级)兼(升级版)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

所属专栏:经典算法题❤️
🚀 >博主首页:初阳785❤️
🚀 >代码托管:chuyang785❤️
🚀 >感谢大家的支持,您的点赞和关注是对我最大的支持!!!❤️
🚀 >博主也会更加的努力,创作出更优质的博文!!❤️
🚀 >关注我,关注我,关注我,重要的事情说三遍!!!!!!!!❤️

1.初级单身狗

1.1题目描述

一个数组中只有一个数字是出现一次,其他所有数字都出现了一次。
例如:
有数组的元素是:1,2,3,4,5,1,2,3,4
只有5出现一次,找出这个数。

1.2解题思路

  • 仔细思考我们发现,相同的两个数发生按位异或后就会等于0,就相当于消消乐一样,二0异或任何数都是本身,通过这个特性我们就很快可以得到解题思路了。

  • 首先第一步,我们初始化一个变量int x=0;我们用x按位异或数组中每个元素
    然后,我们将得到的结果在赋值给x,
    最后等到这个数组遍历完后,最终x的值就是单身狗。

  • 但是这个时候就有人会疑问,我们遍历数组的时候,元素是随机的,没办法得到相邻的相同的两个数之间按位异或然后消除掉啊。拿着怎么办。其实这个不必担心,因为这个按位异或你可想象成是多个数进行相乘,二乘法是符号交换律的,同样的按位异或也符合交换律这一特点,所有无论这两个相同的数位置在哪里,只要他们相同就一定会相互消除。

1.3代码实现

#include <stdio.h>
int main()
{
	int arr[] = { 1,2,3,4,5,1,2,3,4};
	int x = 0;
	int i = 0;
	for (i = 0; i < 7; i++)
	{
		x ^= arr[i];
	}
	printf("%d", x);
	return 0;
}

2.升级单身狗

2.1题目描述

一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。
编写一个函数找出这两个只出现一次的数字。
例如:
有数组的元素是:1,2,3,4,5,1,2,3,4,6
只有5和6只出现1次,要找出5和6.

2.2解题思路

如果我们接着上一题的思路的话,我们得到是两个单身狗异或后的结果。于是我们承接着上一题的思路,从这两个单身狗异或后的到的结果思考。我们知道,相同的两个数他们的二进制位都是对应相同的,要么是1要么是0,于是我们就可有从这一特点出发。既然我们无法通过直接异或得到结果,我们就想办法把这两个单身狗分别分成两派,把他转换成你只有一个单身狗的情况,就按照0/1分配,这个时候这两个单身狗异或后得到的结果派上用场了。异或的特点就是相同为0,相异为1,如果我们把异或后得到的结果通过右移并且按位与上1,如果这个结果是1的话,那么就说明右移的位数就是这两个单身狗二进制位不同的地方一个是1另一个是0,然后我们既然右移的位数,通过0和1把他们区分成两队,这个时候就转换成了只有一个单身狗的情况了。文章来源地址https://www.toymoban.com/news/detail-566475.html

2.3代码实现


#include <stdio.h>
int main()
{
	int arr[] = { 1,2,3,4,5,1,2,3,4,6 };
	int x = 0;
	int i = 0;
	//先找到两个单身狗异或之后得到的结果。
	for (i = 0; i < 10; i++)
	{
		x ^= arr[i];
	}
	//通过异或之后的结果找到第一个不同的二进制位
	int count = 0;
	while (((x >> count)&1)==0)
	{
		count++;
	}
	int a = 0;
	int b = 0;
	//通过右移,按照不同的位分成两类,转换成一个单生狗的情况
	for (i = 0; i < 10; i++)
	{
		if (((arr[i] >> count)&1) == 0)
		{
			a^=arr[i];
		}
		else
		{
			b ^= arr[i];
		}
	}
	printf("%d %d", a, b);
	return 0;
}

到了这里,关于单身狗问题(初级)兼(升级版)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 爱心发射代码带名字升级版

    上次的爱心发射发出来之后,群友想问能不能把心爱的人名字放在爱心中间。 当然没问题啊,于是我就改了改代码,让女神王铁蛋显示在爱心中间,同时还可以在屏幕上飘动满屏的王铁蛋,大大小小、快快慢慢的王铁蛋。 这还拿不下王铁蛋? 话不多说,直接上效果图。 背景

    2024年02月11日
    浏览(35)
  • C语言猜数字升级版

    题目概述 猜数字是一种益智游戏,既可以两个人一起玩,也可以与电脑一起玩。现在我们需要将这个游戏移到电脑上,让电脑与我们一起玩猜数字游戏. 需求分析 用户输入:确定用户输入的数据是否正确 游戏过程:保证计算机能正确选定一个随机数字,并能够正常与用户互

    2024年02月04日
    浏览(40)
  • EasyExcel复杂表头导出(一对多)升级版

            在之前写的 EasyExcel复杂表头导出(一对多)的博客的结尾,受限于当时的能力和精力,留下一些问题及展望。现在写下此博客,目的就是解决之前遗留的问题。         背景介绍,见上述链接指向的博客,这里主要通过 自定义拦截器 的形式来完美解决。 对于图

    2024年02月06日
    浏览(47)
  • P1553 数字反转(升级版)(JAVA)

    以下为原题面,仅供参考: 给定一个数,请将该数各个位上数字反转得到一个新数。 这次与 NOIp2011 普及组第一题不同的是:这个数可以是小数,分数,百分数,整数。整数反转是将所有数位对调;小数反转是把整数部分的数反转,再将小数部分的数反转,不交换整数部分与小

    2024年02月13日
    浏览(28)
  • 云计算中网络基础知识(升级版)

    网络相连:电脑-交换机-电脑 需要配置两个地址:(1) IP地址、子网掩码、网关(网络的出口)。 (2) MAC 地址(物理地址)不需要配置,电脑网卡自带的(天生就有) 电脑必须要配置IP地址、子网掩码 才可以通信、网关可以不用(前提是两台电脑处在同一个网段下) 网关

    2023年04月27日
    浏览(31)
  • Python数据挖掘 | 升级版自动查核酸

    📕作者简介: 热爱跑步的恒川 ,致力于C/C++、Java、Python等多编程语言,热爱跑步,喜爱音乐的一位博主。 📗本文收录于恒川的日常汇报系列,大家有兴趣的可以看一看 📘相关专栏C语言初阶、C语言进阶系列、恒川等,大家有兴趣的可以看一看 📙Python零基础入门系列,J

    2024年02月08日
    浏览(34)
  • 【Unity+MySQL】实现注册登录系统(升级版)

    接着 上篇文章所谈到的系统缺陷,这篇文章进行升级解决。 问题 :注册界面与登录界面是同一个界面,导致用户输入用户密码进行注册后,即可点击登录。 解决 :在同一个场景中分别创建注册界面和登录界面,使用SetActive控制注册/登录成功后UI的显示与隐藏。 整体的UI框

    2024年02月09日
    浏览(35)
  • 洛谷-P1478-陶陶摘苹果(升级版)(贪心)

    又是一年秋季时,陶陶家的苹果树结了 n n n 个果子。陶陶又跑去摘苹果,这次他有一个 a a a 公分的椅子。当他手够不着时,他会站到椅子上再试试。 这次与 NOIp2005 普及组第一题不同的是:陶陶之前搬凳子,力气只剩下 s s s 了。当然,每次摘苹果时都要用一定的力气。陶陶

    2024年02月21日
    浏览(33)
  • Python-敲木鱼升级版(真手动版敲木鱼)

    演示效果 需要安装的第三方库: pip install pygame # 加载音乐 pip install pillow # 加载图片 pip install mediapipe # 判断手势的模型 pip install opencv # 模型要用来处理图形 建议有独显和摄像头的可以尝试! 想着升级一下玩法,只有真敲才能真积徳!于是找了个能判断手势的模型。 源码(

    2024年02月05日
    浏览(30)
  • 语音识别(利用python将语音转化为文字)(升级版)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 基于语音识别(1)进行的完善,修改了60秒断触的问题,另外可以更加方便的调用,语音识别1的链接如下: https://blog.csdn.net/m0_46657126/article/details/124531081 https://www.xfyun.cn/ ps:注册账户是完全免费的,因

    2024年02月03日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包