2013-09-08 10:50:46

一个整型数组中,除了两个数字之外,其他数字都出现了2次,找出这两个只出现一次的数字,要求时间复杂度是O(N),空间复杂度是O(1)。

小结:

  1. 任何数与0异或,结果仍为本身;
  2. 两个相同的数字异或,结果为0;
  3. 利用异或的以上两个特点,进行求解。

代码(测试暂未发现问题,欢迎交流指正!):

 1 #include <iostream>
 2 #include <cassert>
 3 using namespace std;
 4
 5 typedef int DataType;
 6
 7 //返回一个数字的二进制表示中最低位的1的位置
 8 size_t GetNumberOfOnce(DataType number)
 9 {
10     assert(number != 0);
11
12     size_t mask =  1;
13     size_t cnt = 0;
14
15     while ( !(number & mask) )
16     {
17         ++cnt;
18         number = number>>1;
19     }
20
21     return (cnt);
22 }
23
24 //找出一个数组中仅出现一次的数字,通过pNumber1、pNumber2返回
25 void GetNumberOfOnce(DataType *array,size_t len,DataType *pNumber1,DataType *pNumber2)
26 {
27     assert(array != NULL);
28     assert(len >= 2);
29
30     *pNumber1 = 0;
31     *pNumber2 = 0;
32     size_t index = 0;
33     size_t resXOR = array[0];
34
35     for (index = 1;index < len;++index)
36     {
37         resXOR ^= array[index];
38     }
39
40     size_t positionOf1 = GetNumberOfOnce(resXOR);
41     size_t mask = 1 << positionOf1;
42
43     for (index = 0;index < len;++index)
44     {
45         if (array[index] & mask)   //任何数与0异或,结果仍为本身
46         {
47             *pNumber1 ^= array[index];
48         }
49         else
50         {
51             *pNumber2 ^= array[index];
52         }
53     }
54 }
55
56 //测试GetNumberOfOnce函数
57 void TestGetNumberOfOnce()
58 {
59     DataType array[10] = {1,2,3,2, 3,5,6,7, 6,5};
60     //DataType array[10] = {1, 6};
61     size_t len = 10;
62     DataType number1 = 0;
63     DataType number2 = 0;
64
65     GetNumberOfOnce(array,len,&number1,&number2);
66     cout<<"the numbers appear once are : "<<number1<<"\t"<<number2<<endl;
67 }
68
69 int main()
70 {
71     TestGetNumberOfOnce();
72     return 0;
73 }

测试结果:

the numbers appear once are : 7 1
请按任意键继续. . .

转载于:https://www.cnblogs.com/youngforever/p/3308147.html

【剑指offer】找出数组中出现一次的两个数相关推荐

  1. java数组出现次数最多的数_找出数组中出现次数最多的那个数——主元素问题...

    方法一:以空间换时间,可以定义一个计数数组int count[101],用来对数组中数字出现的次数进行计数(只能针对数组中数字的范围1~100),count数组中最大的元素对应的下标,即为出现次数最多 ...

  2. 剑指offer系列-03.数组中的重复数字

    剑指offer系列第03题.数组中的重复数字 找出数组中重复的数字.在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内. 数组中某些数字是重复的,但不知道有几个数字重复了,也不 ...

  3. 《剑指offer》——03. 数组中重复的数字——HashSet、哈希思想——java实现

    文章目录: 1.题目描述 2.解决方案 (1)HashSet方法解决 (2)哈希思想(巧解) 3.参考 1.题目描述 找出数组中重复的数字.         在一个长度为 n 的数组 nums 里的所 ...

  4. 【剑指offer】_15数组中重复的数字

    题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. 例如,如果输入长度为 ...

  5. 剑指offer (03):数组中重复的数字 (C++ Python 实现)

    1 题目一 找出数组中重复的数字 1.1 描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任意一 ...

  6. 剑指offer——3.实现数组中重复数字查找

    知识点: 排序一个长度为n的数组需要的时间 变量和属性的区别: 变量是方法体中定义的,我们称为临时变量:属性是类体中定义的. 权限标示符只用于修饰属性和方法.不修饰变量. 方法中定义的临时变量在方法调 ...

  7. 【剑指offer】登峰造极--数组中重复的数字

    题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. 例如,如果输入长度为 ...

  8. 对分查找的最多次数_「剑指offer题解」数组中出现次数超过一半的数字

    关注我--个人公众号:后端技术漫谈 我目前是一名后端开发工程师.主要关注后端开发,数据安全,网络爬虫,物联网,边缘计算等方向. 原创博客主要内容 Java知识点复习全手册 Leetcode算法题解析 ...

  9. 【剑指offer】_12 数组中的逆序对

    题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%1000 ...

最新文章

  1. 国内操作系统OS分析(上)
  2. 一个强迫症的Git 选择
  3. Buffer Cache Hit Ratio
  4. 敏捷个人架构图 V1.3
  5. python给用户打标签_python用户评论标签匹配的解决方法
  6. php成行排列,一个php实现的生成排列的算法
  7. jquery获得指定元素坐标的方法
  8. dnn模型 list index out of range_通过MalConv模型实现恶意软件的分类
  9. 外星人电脑为什么那么贵_为什么隐形矫正那么贵
  10. 神经网络基础模型--Logistic Regression的理论和实践
  11. 零基础新手应该如何学习平面设计
  12. 七种经典回归分析法全解析
  13. linux联网是否,Linux命令 查看Linux版本和是否联网
  14. php获取qq头像地址,获取 QQ 头像地址,并且不暴露 QQ 号
  15. 齐齐哈尔大学计算机专业好么,齐齐哈尔大学(专业学位)计算机技术考研难吗
  16. IDEA报错:不支持发行版本
  17. ubuntu如何降级到之前的版本
  18. 软件测试主管应具备的素质,软件测试人员应具备的素质
  19. 《Distilling the Knowledge in a Neural Network》 论文阅读笔记
  20. 信息、消息与信号及通信系统的组成

热门文章

  1. 投资级别(Investment Grade)
  2. X-003 FriendlyARM tiny4412 uboot移植之添加相应目录文件
  3. ORA-27102: out of memory并伴随OSD-00031的处理
  4. window.open和window.showModalDialog用法
  5. 商务智能之绩效管理 Performance Management
  6. Android WebView 开发详解(二)
  7. 电子书下载:Illustrated C# 2012 4th
  8. Mybatis之占位符与拼接符
  9. 面试:Handler 的工作原理是怎样的?
  10. leetcode 之Single Number(13)