寻找单身狗(c语言)
在一个数组中寻找一只出现一次的的数字(单身狗)
当今社会 三人行 必有狗 是谁我不说
数组中也会出现 单身狗数字
例如数组 1 2 2 3 3 1 4中 4就是单身狗
思路 因为单身狗只有一个 直接全部异或
异或的特点相同为0,相异为1,
如果有重复的数字 异或就等于0 最后只会留一下一个单身狗
看代码
int main()
{int arr[] = { 1,2,2,3,3,1,4 };int dog = 0;int sz = sizeof(arr) / sizeof(arr[0]);for (int i = 0; i < sz; i++){dog ^= arr[i];}printf("单身狗 是%d", dog);return 0;
}
但是如果人多起来就不会只有一个单身狗 现在假如有两个单身狗我们该怎么找
如果我们按照之前的思路直接异或 肯定只会出来一个四不像数
假设数组1 2 3 3 1 4
思路 我们把 两个单身狗分成两个组
而组中其他的数字就都不是单身狗
此时我们在分组异或就分别得到了2个单身狗
问题 我们以什么为依据分组?
依据 二进制位
异或把相同的数字变成0,不同的数字变成1, 我们根据1在那位 就说明单身狗这个的二进制位不同 ,按照这个二进制位分
两个单身狗是不可能进到一组的
第一步 我们依然把数组中所有数字异或到一起 然后判断这个数字的二进制位 因为有两个单身狗
最后异或完毕得到了 6 6的二进制位是 0110 说明两个单身狗数字的二进制最后位是相等
我们左移一位得到了1 就说明 两个单身狗数字的倒数第二位二进制数 不相等
第二步 让数组中所有的数字左移一位 如果等于 1 放进第一个数组中
如果等于0 放进第二个数组中
第三步 把数组中的数字全部异或就得到了 2个单身狗
直接上代码
int main()
{int arr[] = { 1,2,3,3,1,4 };int sum = 0;int sz = sizeof(arr) / sizeof(arr[0]);for (int i = 0; i < sz; i++){sum ^= arr[i];}int count = 0;for (int i = 0; i < 32; i++){if (sum & 1 <<i) //循环判断第几位是1{count = i;//如果是1 记录下来break;}}int dog1 = 0, dog2 = 0;for (int i = 0; i < sz; i++){if ( arr[i] & 1 <<count)dog1 ^= arr[i];elsedog2 ^= arr[i];}printf("第一个单身狗%d\n 第二个单身狗%d", dog1, dog2);return 0;
}
寻找单身狗(c语言)相关推荐
- 每日一练Day04:寻找单身狗
寻找单身狗 一.一个单身狗 二.两个单身狗 寻找单身狗实际上是力扣上的<只出现一次的数字>具体描述如下: 一.一个单身狗 本题的特点是: 非空数组.其余数字出现两次.寻找只出现一次的数字. ...
- hpuoj【1040】寻找单身狗 【思维】
1040: 寻找单身狗 [思维] 时间限制: 1 Sec 内存限制: 128 MB 提交: 168 解决: 55 统计 题目描述 杜陵韦固,元和二年旅次宋城遇一老人倚布囊,坐于阶上,向月捡书.固 ...
- hpuoj寻找单身狗
1040: 寻找单身狗 [思维] 时间限制: 1 Sec 内存限制: 128 MB 点击打开题目链接 题目描述 杜陵韦固,元和二年旅次宋城遇一老人倚布囊,坐于阶上,向月捡书.固问所寻何书,答曰:&q ...
- 初学C语言【14】寻找单身狗
一个数组中只有两个数字是出现一次,其他所有数字都出现了两次.编写一个函数找出这两个只出现一次的数字.LeetCode:只出现一次的数字,题目链接 示例 输入:[ 1,2,3,4,5,2,1,3 ] 输 ...
- PAT Basic 1065. 单身狗(25)(C语言实现)
我的PAT系列文章更新重心已移至Github,欢迎来看PAT题解的小伙伴请到Github Pages浏览最新内容.此处文章目前已更新至与Github Pages同步.欢迎star我的repo. 题目 ...
- c语言单身狗题目罩得住学长,看到就是赚到!心理学教授研究多年,只为谈不了恋爱的你...
近了近了,妹妹们的成团日终于近了! 为了将pick的妹妹送上梦寐以求的出道位,本青春制作人日夜不停咬定打投不放松! 一边听着<YES!OK!>为自己加油打劲,一边想象着明天九人团的团名舒缓 ...
- C语言—找出单身狗(2个)
//找出数组中两个只出现一次的数,其它数都成对存在 #include<stdio.h> int main() {int arr[10] = { 5,7,6,1,2,6,7,2,3,1 }; ...
- 【Python】双十一,就用turtle画个单身狗送给自己
「@Author:Runsen」 今年的双十一到了 但还有谁记得双十一是 单身狗的节日单身狗的我是时候站出来 捍卫自己的权益了 单身是一种怎样的状态? 我们所有人都单身过, 但也许只有很少的人真正体验 ...
- 用python画一个人_用turtle画个单身狗送给自己~
python视频教程栏目介绍如何使用turtle画图. 今年的双十一到了 但还有谁记得双十一是 单身狗的节日 单身狗的我是时候站出来 捍卫自己的权益了 单身是一种怎样的状态? 我们所有人都单身过,但也 ...
最新文章
- android view父级隐藏,Android指定的子级已经有父级。必须先对子级的父级调用removeView()...
- java下包内继承时编译不过解决方案
- LINUX IRC使用
- python迭代器举例_如何最简单、通俗地理解Python的迭代器?
- 自定义枚举typeHandler
- 优秀的人都有一个共同点
- LeetCode:Add Binary
- #define _INTSIZEOF(n) ((sizeof(n)+sizeof(int)-1)~(sizeof(int) - 1) )
- kmem_cache_alloc核心函数slab_alloc_node的实现详解
- seo网站优化技巧_新网站的10个SEO技巧
- ZZNU2141: 2333
- Android 7.0 APN 拨号上网流程分析
- 水晶报表打印出错,未能加载文件或程序集“CrystalDecisions.CrystalReports.Engine, Version=10.5.3700.0
- 什么是网络爬虫以及通用爬虫和聚焦爬虫的介绍
- 【树莓派Zero入门】-第三章:USB摄像头的使用(也可以双摄像头拍照,插两个USB摄像头就好了)
- 【ROS】移动机器人导航仿真(2)——SLAM(gmapping)
- 你会在 JitPack 上创建依赖库吗?
- u-boot.lds文件诠释
- STM32 SPI发送波形
- robots协议相关