初学C语言【14】寻找单身狗
一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。编写一个函数找出这两个只出现一次的数字。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】寻找单身狗相关推荐
- 每日一练Day04:寻找单身狗
寻找单身狗 一.一个单身狗 二.两个单身狗 寻找单身狗实际上是力扣上的<只出现一次的数字>具体描述如下: 一.一个单身狗 本题的特点是: 非空数组.其余数字出现两次.寻找只出现一次的数字. ...
- hpuoj【1040】寻找单身狗 【思维】
1040: 寻找单身狗 [思维] 时间限制: 1 Sec 内存限制: 128 MB 提交: 168 解决: 55 统计 题目描述 杜陵韦固,元和二年旅次宋城遇一老人倚布囊,坐于阶上,向月捡书.固 ...
- hpuoj寻找单身狗
1040: 寻找单身狗 [思维] 时间限制: 1 Sec 内存限制: 128 MB 点击打开题目链接 题目描述 杜陵韦固,元和二年旅次宋城遇一老人倚布囊,坐于阶上,向月捡书.固问所寻何书,答曰:&q ...
- 寻找单身狗(c语言)
在一个数组中寻找一只出现一次的的数字(单身狗) 当今社会 三人行 必有狗 是谁我不说 数组中也会出现 单身狗数字 例如数组 1 2 2 3 3 1 4中 4就是单身狗 思路 因为单身狗只有一个 直 ...
- C语言—找出单身狗(2个)
//找出数组中两个只出现一次的数,其它数都成对存在 #include<stdio.h> int main() {int arr[10] = { 5,7,6,1,2,6,7,2,3,1 }; ...
- PAT Basic 1065. 单身狗(25)(C语言实现)
我的PAT系列文章更新重心已移至Github,欢迎来看PAT题解的小伙伴请到Github Pages浏览最新内容.此处文章目前已更新至与Github Pages同步.欢迎star我的repo. 题目 ...
- c语言单身狗题目罩得住学长,看到就是赚到!心理学教授研究多年,只为谈不了恋爱的你...
近了近了,妹妹们的成团日终于近了! 为了将pick的妹妹送上梦寐以求的出道位,本青春制作人日夜不停咬定打投不放松! 一边听着<YES!OK!>为自己加油打劲,一边想象着明天九人团的团名舒缓 ...
- 初学C语言,你的“行囊”需要准备什么呢?
关注.星标公众号,直达精彩内容 今天,我能够自称是一个混IT的人,并能以此谋生,将来大家能一次谋生,都要感谢两个人:克劳德.香农和约翰.冯.诺依曼,是他们发现了所有的数字化信息,不论是一段程序,一封e ...
- 如果是初学C语言请看完 一些成功人士的心得
转自程先的专栏 今天,我能够自称是一个混IT的人,并能以此谋生,将来大家能一次谋生,都要感谢两个人:克劳德.香农和约翰.冯.诺依曼,是他们发现了所有的数字化信息,不论是一段程序,一封email ...
最新文章
- 阿里员工哀叹不读书已经没有出路,招聘简历基本都是985
- 量子神经网络:人工智能研究的新范式
- 国内阿里Maven仓库镜像及自己收集镜像库
- 查看python库的版本-python中查看第三方库的版本号
- APK瘦身记,怎样实现高达53%的压缩效果
- 去掉字符串后面所有的0 去掉字符串前面或后面的0;
- 基于IDEA搭建JavaWeb入门项目结构(2021版)
- JS 匿名函数 自执行
- POJ2182 HDU2711 Lost Cows【树状数组+线段树】
- 【趣味连载】攻城狮上传视频与普通人上传视频:(一)生成结构化数据
- android移动应用基础教程源代码,《Android移动应用基础教程》之Android购物商城
- MFC 用Gdiplus画曲线和直线
- GNSS说第(三)讲---最新的GNSS观测数据及精密星历等产品的下载方式及地址
- python3用turtle模块画一棵随机樱花树
- w7系统怎么ping服务器,怎么ping网速,教您ping网络的方法
- Linux VGA驱动移植实验
- 不要时刻忘记保持微笑
- Vue+ elementui 布局混乱
- 301代码php代码在哪里加,301转向设置及代码及方法详解
- python之函数len()