case1

一个整形数组中除了一个数字之外,其他数字都出现了两次,请找出这个数。要求时间复杂度O(n),空间复杂度O(1).

思路:

关键词:一次,两次。
出现两次会带来什么效果?联想到异或,一个数与自身异或结果为零。

解法:

将数组中所有的数异或起来,出现两次的数相互抵消,最后的结果就是只出现一次的数。

case2

一个整形数组中除了两个数字之外,其他数字都出现了两次,请找出这个数。要求时间复杂度O(n),空间复杂度O(1).

思路:

  • 沿用上题思路,全都异或起来,结果是两个只出现的一次的数的异或结果。要分开,如何分开?
  • 从异或入手,两数异或结果中为1的bit,就是两个数的二进制表示不同的位数,任意选一位来分割原数组,再分别异或即可。
  • 不care其他数到底分在哪个组里,反正某两个相同的数会被在同一组中并抵消)

解法:

  • 将数组中所有的数异或,得到result1
  • 找出result1中第一个为1的bit(假设为n)
  • 以bit n的情况划分原数组,两组内分别异或

源程序:

class Solution {
public:void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {int lengh = data.size();int result = 0;for(int i = 0;i < lengh;++ i) result = result ^ data[i];//分割数组的数int partition = 1;while (!(result & partition))partition = partition << 1;*num1 = 0;*num2 = 0;for(int i = 0;i < lengh;++ i) {if (data[i] & partition)*num1 = (*num1) ^ data[i];else*num2 = (*num2) ^ data[i];}}
};

转载于:https://www.cnblogs.com/rainySue/p/zhao-chu-shu-zu-zhong-zhi-chu-xian-yi-ci-de-shu.html

找出数组中只出现一次的数相关推荐

  1. 找出数组中只出现了一次的数字(Java)

    找出数组中只出现了一次的数字 题目 题目分析 方法1 方法2 方法3 代码实现 主方法 方法1 第一种:使用计数器的 第二种:不使用计数器 方法2 方法3 总结 题目 给定一个非空整数数组,除了某个元 ...

  2. 找出数组中只出现过一次的数

    一个大数组,在1到25000之间,只有4K memory, 打印出其中正好只出现过一次的数.没出现过,出现过2次,3次,或更多,都不打印. solutions: 1)位图法,但每个数有3个状态:0,1 ...

  3. 找出数组中只出现1次的两个元素

    通过位运算可以得到只出现1次的唯一元素,但是如果有两个元素出现1次,则需要更进一步. 对整个数组依次进行异或运算后,得到的是两个出现一次元素的异或,之后将这两个元素的最后面是1的位记录下来,并以此为标 ...

  4. C语言 找出数组中重复数字出现最多的数

    在堆区申请一个超级大的一维数组空间,用它的下标存原数组的数..出现一次对应下标的值+1-觉得这样方便的不然就是不停的遍历-暂时没想到其他办法-就投机一下. int Find(int *pStr,int ...

  5. 微策略2011校园招聘笔试题(找出数组中两个只出现一次的数字)

    1.8*8的棋盘上面放着64个不同价值的礼物,每个小的棋盘上面放置一个礼物(礼物的价值大于0),一个人初始位置在棋盘的左上角,每次他只能向下或向右移动一步,并拿走对应棋盘上的礼物,结束位置在棋盘的右下 ...

  6. 找出数组中出现次数超过一半的数

    算法--找出数组中出现次数超过一半的数      每当我看到经典的算法题,就怀念高中,感觉很多算法题就是高中的题目,谁叫哥只读了个专科,高数基本相当没学.      有空要看看高数啊,想当年数学那是相 ...

  7. [LeetCode] Find All Numbers Disappeared in an Array 找出数组中所有消失的数字

    Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and ot ...

  8. 找出数组中最大值次大值的一次遍历方法(C++)

    写在前面 昨天做了一道LeetCode题(747. 至少是其他数字两倍的最大数 - 力扣(LeetCode) (leetcode-cn.com)), 大致意思是找出数组中的最大值和次大值并返回最大值索 ...

  9. java 数组不重复_java如何找出数组中的不重复数字

    找出数组中不重复的一个数字,题目大致是这样的:int[] a = { 1, 2, 3, 4, 3, 2, 1 }; 在线视频教程推荐:java在线学习 解决办法是:public static int ...

最新文章

  1. AI人必看!89页全网最全清华知识图谱报告(附PDF)
  2. python按概率输出分类结果_sklearn例程:多分类输出概率
  3. 使用 Stream API 高逼格 优化 Java 代码!
  4. 爬虫、框架scrapy
  5. C++彩色数据流动界面
  6. 多元线性回归分析matlab实验报告,利用MATLAB进行多元线性回归.ppt
  7. 行业最大!黑鲨5系列将搭载5320mm²双VC散热:冰封骁龙8
  8. python 生成excel像素画_【译】只用 CSS 就能做到的像素画/像素动画
  9. Mongodb启动关闭
  10. 免费好用的钉钉内网穿透
  11. 筷子兄弟--11度青春系列电影之老男孩,相信你会感动!!
  12. 回车符号和换行符号产生背景
  13. [享学Jackson] 四、控制Jackson行为的特征们之JsonFactory.Feature、JsonGenerator.Feature、JsonParser.Feature
  14. 统计给定的n个数中,负数、零和正数的个数
  15. python抢票脚本好用吗_春运到了,带你用python来抢票回家!
  16. Rocket MQ发送消息报错: service not available now
  17. 如何从Steam库中隐藏或删除游戏
  18. 《个体软件过程》—第8章8.2节认真制订承诺
  19. linux输入子系统概述,Linux输入子系统(Input Subsystem)
  20. 程序生成随机双色球号码~golang

热门文章

  1. 日首相:对韩日问题深感遗憾 将采取强硬应对措施
  2. GMTC 大前端时代前端监控的最佳实践 1
  3. 《Android 3D游戏开发技术宝典——OpenGL ES 2.0》——2.4节文件I/O
  4. 原来华为是一家做音乐的公司
  5. javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint
  6. 卖程序的小女孩(转)
  7. Windows Phone 实用开发技巧(18):使用SystemTray显示全局消息提醒
  8. TurboMail打造雀氏(中国)日用品邮件系统
  9. 浅析ElasticSearch原理
  10. r语言实现sem_统计基础:【18】使用Excel和R语言来实现抽样