一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。编写一个函数找出这两个只出现一次的数字。LeetCode:只出现一次的数字,题目链接

示例

输入:[ 1,2,3,4,5,2,1,3 ]

输出:4 , 5

方法一:先对数组进行排序,排序后进行相邻的数字比较是否相同。图示:

#include<stdio.h>
void Bbsort(int* a,int n)//冒泡排序
{int j = 0;int i = 0;for (i = 0; i < n; i++){for (j = 0; j < n - i - 1; j++){if (a[j] > a[j + 1]){int temp = a[j];a[j] = a[j+1];a[j + 1] = temp;}}}
}
void finddog(int* a, int n,int* num )
{Bbsort(a,n);//首先排序int i = 0;int j = 0;for (i = 0; i < n;){if (a[i] == a[i + 1])//相邻两个相等,遍历下一组{i += 2;//跳过一组}else//不相等,记录第一个数据,第二个为起始位置{num[j]= a[i];i++;j++;}}
}
int main()
{int arr[] = { 1,2,3,4,5,2,1,3 };int num[2] = {0};int sz = sizeof(arr) / sizeof(arr[0]);//元素个数finddog(arr,sz,num);printf("%d %d ", num[0],num[1]);return 0;
}

方法二 :异或(两数,相同为 0 ,相异为 1 ),整个数组全部元素进行异或,出现两次的元素异或为“0”,最后的结果不可能是零(否则没有单身狗了,不可能,我就是单身狗),寻找数组元素异或后二进制为 1 的位置(区别),然后将该数组分为两组,一组该二进制位全为 1 ,将数组中该位为1的所有数异或,因为数组中相同的数异或为0,仅留下该位为1的单身狗数;另外一组该位全为0,同理,该位为0的所有数异或,最后仅留下该位为0的单身狗数。

#include<stdio.h>
void finddog(int a[], int sz, int* num)
{int i = 0;int pos = 0;int ret = 0;//遍历数组,结果为两个不同数的异或。for (i = 0; i < sz; i++){ret ^= a[i];}//寻找这两个不同数异或结果的一个位为 1 的位for (pos = 0; pos < 32; pos++){if (((ret >> pos) & 1) == 1)//整型 32 位,从低位向高位依次遍历{break;     //pos记录二进制位为 1 的数}}for (i = 0; i < sz; i++){//找到数组中pos位为1的数,并进行异或if (((a[i] >> pos) & 1) == 1){num[1] ^= a[i];}//找到数组中pos位为0的数,并进行异或else{num[0] ^= a[i];}}
}
int main()
{int arr[] = { 1, 2, 3, 4, 5, 2, 1, 3 };int num[2] = { 0 };int sz = sizeof(arr) / sizeof(arr[0]);finddog(arr, sz, num);printf("%d %d\n", num[0], num[1]);return 0;
}

初学C语言【14】寻找单身狗相关推荐

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

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

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

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

  3. hpuoj寻找单身狗

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

  4. 寻找单身狗(c语言)

    在一个数组中寻找一只出现一次的的数字(单身狗) 当今社会 三人行 必有狗 是谁我不说 数组中也会出现 单身狗数字  例如数组 1 2 2 3 3 1 4中  4就是单身狗 思路 因为单身狗只有一个 直 ...

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

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

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

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

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

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

  8. 初学C语言,你的“行囊”需要准备什么呢?

    关注.星标公众号,直达精彩内容 今天,我能够自称是一个混IT的人,并能以此谋生,将来大家能一次谋生,都要感谢两个人:克劳德.香农和约翰.冯.诺依曼,是他们发现了所有的数字化信息,不论是一段程序,一封e ...

  9. 如果是初学C语言请看完 一些成功人士的心得

    转自程先的专栏     今天,我能够自称是一个混IT的人,并能以此谋生,将来大家能一次谋生,都要感谢两个人:克劳德.香农和约翰.冯.诺依曼,是他们发现了所有的数字化信息,不论是一段程序,一封email ...

最新文章

  1. 阿里员工哀叹不读书已经没有出路,招聘简历基本都是985
  2. 量子神经网络:人工智能研究的新范式
  3. 国内阿里Maven仓库镜像及自己收集镜像库
  4. 查看python库的版本-python中查看第三方库的版本号
  5. APK瘦身记,怎样实现高达53%的压缩效果
  6. 去掉字符串后面所有的0 去掉字符串前面或后面的0;
  7. 基于IDEA搭建JavaWeb入门项目结构(2021版)
  8. JS 匿名函数 自执行
  9. POJ2182 HDU2711 Lost Cows【树状数组+线段树】
  10. 【趣味连载】攻城狮上传视频与普通人上传视频:(一)生成结构化数据
  11. android移动应用基础教程源代码,《Android移动应用基础教程》之Android购物商城
  12. MFC 用Gdiplus画曲线和直线
  13. GNSS说第(三)讲---最新的GNSS观测数据及精密星历等产品的下载方式及地址
  14. python3用turtle模块画一棵随机樱花树
  15. w7系统怎么ping服务器,怎么ping网速,教您ping网络的方法
  16. Linux VGA驱动移植实验
  17. 不要时刻忘记保持微笑
  18. Vue+ elementui 布局混乱
  19. 301代码php代码在哪里加,301转向设置及代码及方法详解
  20. python之函数len()

热门文章

  1. vue+typescript怎么写computed
  2. 20190422每周精品之淘宝
  3. 小电流接地系统单相接地故障选线及保护
  4. matlab的figure如何保存成jpg
  5. 基于tensorflow + Vgg16进行图像分类识别
  6. 《梦幻花》-东野圭吾
  7. 嵌入式系统中的文件系统以及MTD
  8. 【C语言与汇编】简单学学C到汇编代码
  9. QueryList 采集
  10. django框架加入simditor富文本编辑器,使用mako进行渲染