在一个数组中寻找一只出现一次的的数字(单身狗)

当今社会 三人行 必有狗 是谁我不说

数组中也会出现 单身狗数字 

例如数组 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语言)相关推荐

  1. 每日一练Day04:寻找单身狗

    寻找单身狗 一.一个单身狗 二.两个单身狗 寻找单身狗实际上是力扣上的<只出现一次的数字>具体描述如下: 一.一个单身狗 本题的特点是: 非空数组.其余数字出现两次.寻找只出现一次的数字. ...

  2. hpuoj【1040】寻找单身狗 【思维】

    1040: 寻找单身狗 [思维] 时间限制: 1 Sec  内存限制: 128 MB 提交: 168  解决: 55  统计 题目描述 杜陵韦固,元和二年旅次宋城遇一老人倚布囊,坐于阶上,向月捡书.固 ...

  3. hpuoj寻找单身狗

    1040: 寻找单身狗 [思维] 时间限制: 1 Sec  内存限制: 128 MB 点击打开题目链接 题目描述 杜陵韦固,元和二年旅次宋城遇一老人倚布囊,坐于阶上,向月捡书.固问所寻何书,答曰:&q ...

  4. 初学C语言【14】寻找单身狗

    一个数组中只有两个数字是出现一次,其他所有数字都出现了两次.编写一个函数找出这两个只出现一次的数字.LeetCode:只出现一次的数字,题目链接 示例 输入:[ 1,2,3,4,5,2,1,3 ] 输 ...

  5. PAT Basic 1065. 单身狗(25)(C语言实现)

    我的PAT系列文章更新重心已移至Github,欢迎来看PAT题解的小伙伴请到Github Pages浏览最新内容.此处文章目前已更新至与Github Pages同步.欢迎star我的repo. 题目 ...

  6. c语言单身狗题目罩得住学长,看到就是赚到!心理学教授研究多年,只为谈不了恋爱的你...

    近了近了,妹妹们的成团日终于近了! 为了将pick的妹妹送上梦寐以求的出道位,本青春制作人日夜不停咬定打投不放松! 一边听着<YES!OK!>为自己加油打劲,一边想象着明天九人团的团名舒缓 ...

  7. C语言—找出单身狗(2个)

    //找出数组中两个只出现一次的数,其它数都成对存在 #include<stdio.h> int main() {int arr[10] = { 5,7,6,1,2,6,7,2,3,1 }; ...

  8. 【Python】双十一,就用turtle画个单身狗送给自己

    「@Author:Runsen」 今年的双十一到了 但还有谁记得双十一是 单身狗的节日单身狗的我是时候站出来 捍卫自己的权益了 单身是一种怎样的状态? 我们所有人都单身过, 但也许只有很少的人真正体验 ...

  9. 用python画一个人_用turtle画个单身狗送给自己~

    python视频教程栏目介绍如何使用turtle画图. 今年的双十一到了 但还有谁记得双十一是 单身狗的节日 单身狗的我是时候站出来 捍卫自己的权益了 单身是一种怎样的状态? 我们所有人都单身过,但也 ...

最新文章

  1. android view父级隐藏,Android指定的子级已经有父级。必须先对子级的父级调用removeView()...
  2. java下包内继承时编译不过解决方案
  3. LINUX IRC使用
  4. python迭代器举例_如何最简单、通俗地理解Python的迭代器?
  5. 自定义枚举typeHandler
  6. 优秀的人都有一个共同点
  7. LeetCode:Add Binary
  8. #define _INTSIZEOF(n) ((sizeof(n)+sizeof(int)-1)~(sizeof(int) - 1) )
  9. kmem_cache_alloc核心函数slab_alloc_node的实现详解
  10. seo网站优化技巧_新网站的10个SEO技巧
  11. ZZNU2141: 2333
  12. Android 7.0 APN 拨号上网流程分析
  13. 水晶报表打印出错,未能加载文件或程序集“CrystalDecisions.CrystalReports.Engine, Version=10.5.3700.0
  14. 什么是网络爬虫以及通用爬虫和聚焦爬虫的介绍
  15. 【树莓派Zero入门】-第三章:USB摄像头的使用(也可以双摄像头拍照,插两个USB摄像头就好了)
  16. 【ROS】移动机器人导航仿真(2)——SLAM(gmapping)
  17. 你会在 JitPack 上创建依赖库吗?
  18. u-boot.lds文件诠释
  19. STM32 SPI发送波形
  20. robots协议相关

热门文章

  1. 磊科路由器信号按键_磊科无线路由操作手册
  2. 手把手教你Java/JDK安装与环境搭建
  3. JVM运行时内存结构学习
  4. AirDisk产品入门教学视频
  5. 【修复日常bug】微信小程序canvas画商品海报出现个别用户无法生成的情况
  6. 中国互联网移动互联网消费者分析
  7. 腾讯云4核8g服务器支持多少人在线使用?
  8. 余世维:如何培养领袖性格
  9. 常网小站 骗子网站 大家小心别上当
  10. 我做了一个手写春联小网页,祝大家虎年暴富