假如你有一个用1001个整数组成的数组,这些整数是任意排列的,但是你知道所有的整数都在1到1000之间(包括1000)、此外,除了一个数字出现两次外,其他的数字只出现了一次。假设你对数组做一次处理,用一种算法找出重复的那个数字,要求不使用大量额外的存储空间(即要求辅助空间为O(1))

题目的意思很明显,1001个数字中只有一个数字出现了两次,其余的都是一次。并且不缺少任何数字。那么找到这个数字,我们可以有很多思路:

思路a:求和,最简单也最容易想出来的方法 1+2+3+4+。。。+1000的和与数组的和求差,差的结果就是这个数字,缺点是,求和的话,结果可能会溢出。不妨看思路2

思路b:异或,位操作总有让你惊喜的地方,原理是:

@ 如果两个相同的数求异或,那么结果为0。

@ 0与一个数异或的结果为这个数

@ a^b ^a = b   ;a^b^b  = a;

据此,可以对数组的元素与1,2,34,56,7,8...1000依次异或,最后的结果就是出现两次的数字。

php实现代码如下:

<?php
class php_xor
{function __construct($arr){if(!is_array($arr))return FALSE;$k = $arr[0];  for($i=1; $i<=1000; $i++){  $k ^= ($arr[$i]^$i);  }echo 'arr repeatable num is: '.$k;}
}function main()
{$arr = array();  for($i=0; $i<=999; $i++ ){  $arr[$i] = $i+1;  }  $arr[1000] = mt_rand(1, 1000);  echo "the repeatable num is: ".$arr[1000].'<br/>';new php_xor($arr);
}main();

转载于:https://blog.51cto.com/hehe1987/1650951

找出重复的那个数字的异或算法相关推荐

  1. python查找数列中重复数字_在数组中找出重复的数字(异或法)

    购买本课程后,可以加51CTO学院李宁老师官方交流群:550369460注意,该群只允许购买李宁老师课程的学员进行技术交流,加群时需要提供在51CTO购买李宁老师课程的订单编号(任何一个课程的订单编号 ...

  2. 剑指offer答案 c语言,剑指offer之C语言不修改数组找出重复的数字

    1  题目 不修改数组找出重复的数字 在一个长度为N+1的数组里面的所有数字都在范围1~N范围内,所以数组至少有一个数字是重复的,请找出重复数字,但是不能修改输入的数组. 2  思路 思路1: 我们开 ...

  3. 1亿数字中找出重复次数TopN的问题

    /*** @Date 2020/7/3* @param dataSize 数据量的大小* @param randomNumRange 产生随机数的范围* @param topN 找出重复次数前N的.* ...

  4. 找出重复的数java_剑指offer:1.找出数组中重复的数(java版)

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

  5. 一个数组中只有两个数字是出现一次, 其他所有数字都出现了两次,找出这两个数字

    题目:一个数组中只有两个数字是出现一次, 其他所有数字都出现了两次. 找出这两个数字,编程实现. 参考代码: #include<stdio.h> #include <windows. ...

  6. 在excel中如何筛选重复数据_EXCEL里如何快速找出重复的数据?

    [问题] 有网友私信于我"请问一组6个数字.一共450组.EXCEL能不能自动识别出重复3个数字以上组数出来呢?比如第一组1-2-3-4-5-6.第二组7-8-9-10-11-12.第三组1 ...

  7. 【宫水三叶的刷题日记】961. 在长度 2N 的数组中找出重复 N 次的元素

    题目描述 这是 LeetCode 上的 961. 在长度 2N 的数组中找出重复 N 次的元素 ,难度为 简单. Tag : 「模拟」.「计数」.「构造」.「哈希表」 给你一个整数数组 nums ,该 ...

  8. 找出字符串中所有数字

    刚才网友在SKYPE问Insus.NET一个问题,在MS SQL中,怎样找出一个字符串所有数字. Insus.NET使用较简单与平常的方法,就是使用循环的方法,循环字符串中每一个字符,并插入至一个表变 ...

  9. Java第三大的数,Java通过排序找出数组第三大数字

    Java通过排序找出数组第三大数字 1 方式一:对数组进行排序并返回第三大数字 通过对数组进行排序并返回第三大数字,我们可以找到java中的第三大数字.让我们看看完整的示例,以找到java数组中的第三 ...

最新文章

  1. 原始nginx.conf备份
  2. Nacos配置中心用法详细介绍
  3. C++中c_str的用法
  4. 我的编程学习日志(1)--进制转换
  5. 给JSP页面加过滤器
  6. linux ubuntu系统安装dotnet / Azcopy
  7. socket 接收和发送缓冲区
  8. python-编程之美
  9. QtDesigner配置
  10. 主成分与因子分析异同_浅谈主成分分析与因子分析
  11. 顺序结构程序设计实例
  12. C语言编写走迷宫小游戏
  13. PHP合并两张(多张)图片
  14. 编程中常见的各种符号英文名字
  15. 【电脑使用】修改注册表——让有密码的电脑开机自动登录
  16. wps2019数据分析加载项_《07版office办公软件中的excle中,为什么在加载项里选择了分析工具库,数据分析还是显示不出来?》 wps数据分析加载项...
  17. CRMEB 商城订单发货功能
  18. JAVA中excel文件导入日期变成数字解决方案
  19. css为何不支持父元素选择器
  20. STM32+ MAX30102通过指尖测量心率+血氧饱和度

热门文章

  1. python读取txt数据-Python读取txt数据文件,并作图
  2. linux如何去掉目录背景颜色
  3. ubuntu18.04下编译mysql5.7源码
  4. PHP的DES加解密函数 与JAVA兼容
  5. 网络编程学习笔记(批量输入)
  6. select元素的各种jquery修改获取添加方法
  7. 【C#】数据类型(sbyte,byte,short,ushort,int,uint,long,ulong和char。、、、)...
  8. Ogre 学习笔记 (二) 环境:阴影 、雾效、灯光
  9. 在Windows下安装配置OpenCV-Python-PyCharm开发环境
  10. C/C++中判断两个变量是否相等,相减是否为0、大于0或小于0时要特别注意机器误差带来的影响