数组中只出现一次的数字
来源:互联网 发布:linux目录结构 编辑:程序博客网 时间:2024/06/02 06:39
一个整形数组里除了一个数字之外,其它数字都出现了两次,请写程序找出这一个只出现一次的数字。要求时间复杂度为O(n),空间复杂度为O(1).
[root@localhost c_language]# gcc -g one_time_two_int.c -o one_time_two_int
[root@localhost c_language]# ./one_time_two_int
bit = 0x2
the one time int is 6,-4
如输入数组{-2,-4,-3,6,-3,-2,5,5,6} ,只有4出现了1次。
原理: 任何两个相同的数字异或的结果是0.
#include <stdio.h>#include <stdlib.h>int one_time_int(int array[],int len){ unsigned int i; int result = 0; for(i = 0 ; i < len; i++) { result = result ^ array[i]; } return result;}void main(int argc, char * argv[]){ int array[] = {-2,-4,-3,6,-3,-2,5,5,6}; int ret; ret = one_time_int(array,sizeof(array)/sizeof(array[0])); printf("the one time int is %d\n",ret); return;}
[root@localhost c_language]# gcc -g one_time_int.c -o one_time_int[root@localhost c_language]# ./one_time_int the one time int is -4
将该题难度加大:
一个整形数组里除了2个数字之外,其它数字都出现了两次,请写程序找出这两个只出现一次的数字。要求时间复杂度为O(n),空间复杂度为O(1).
如输入数组{-2,-4,-3,6,-3,-2,5,5} ,只有-4和6都只出现了1次。
#include <stdio.h>#include <stdlib.h>int one_time_int(int array[],int len){ unsigned int i; int result = 0; for(i = 0 ; i < len; i++) { result = result ^ array[i]; } return result;}void main(int argc, char * argv[]){ int array[] = {-2,-4,-3,6,-3,-2,5,5}; int ret; int ret1; int i = 0; int bit = 1; int len; len = sizeof(array)/sizeof(array[0]); ret = one_time_int(array,sizeof(array)/sizeof(array[0])); while(!(bit & ret)) { bit = bit << 1; } printf("bit = 0x%x\n",bit); ret = 0; ret1 = 0; for(i = 0 ;i < len; i++) { if(bit & array[i]) { ret = ret ^ array[i]; }else { ret1 = ret1 ^ array[i]; } } printf("the one time int is %d,%d\n",ret,ret1); return;}
[root@localhost c_language]# gcc -g one_time_two_int.c -o one_time_two_int
[root@localhost c_language]# ./one_time_two_int
bit = 0x2
the one time int is 6,-4
0 0
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 《深入分析JAVA web技术内幕》 之 CDN和Load balance
- java8 特性
- jsp和html的区别
- android基础之onActivityResult不执行问题
- 通讯录数据的存取(二)—— 获取通讯录的具体信息
- 数组中只出现一次的数字
- 简单分析小米智能插座基础版电路
- Android之带遮罩层的弹出框—popUpWindow
- Ubuntu使用小技巧
- JSON 含有中文传到前台变???的解决方法(使用springmvc)
- Linux操作系统文件系统与目录树的关系(挂载)
- Thinkphp中模板js变量传参给PHP,并获得返回值
- 网卡工作原理详解
- Unicode介绍