找出重复的那个数字的异或算法
假如你有一个用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
找出重复的那个数字的异或算法相关推荐
- python查找数列中重复数字_在数组中找出重复的数字(异或法)
购买本课程后,可以加51CTO学院李宁老师官方交流群:550369460注意,该群只允许购买李宁老师课程的学员进行技术交流,加群时需要提供在51CTO购买李宁老师课程的订单编号(任何一个课程的订单编号 ...
- 剑指offer答案 c语言,剑指offer之C语言不修改数组找出重复的数字
1 题目 不修改数组找出重复的数字 在一个长度为N+1的数组里面的所有数字都在范围1~N范围内,所以数组至少有一个数字是重复的,请找出重复数字,但是不能修改输入的数组. 2 思路 思路1: 我们开 ...
- 1亿数字中找出重复次数TopN的问题
/*** @Date 2020/7/3* @param dataSize 数据量的大小* @param randomNumRange 产生随机数的范围* @param topN 找出重复次数前N的.* ...
- 找出重复的数java_剑指offer:1.找出数组中重复的数(java版)
数组中重复的数: 题目:找出数组中重复的数, 题目描述: 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的. 也不知道每个数字重复几次.请找 ...
- 一个数组中只有两个数字是出现一次, 其他所有数字都出现了两次,找出这两个数字
题目:一个数组中只有两个数字是出现一次, 其他所有数字都出现了两次. 找出这两个数字,编程实现. 参考代码: #include<stdio.h> #include <windows. ...
- 在excel中如何筛选重复数据_EXCEL里如何快速找出重复的数据?
[问题] 有网友私信于我"请问一组6个数字.一共450组.EXCEL能不能自动识别出重复3个数字以上组数出来呢?比如第一组1-2-3-4-5-6.第二组7-8-9-10-11-12.第三组1 ...
- 【宫水三叶的刷题日记】961. 在长度 2N 的数组中找出重复 N 次的元素
题目描述 这是 LeetCode 上的 961. 在长度 2N 的数组中找出重复 N 次的元素 ,难度为 简单. Tag : 「模拟」.「计数」.「构造」.「哈希表」 给你一个整数数组 nums ,该 ...
- 找出字符串中所有数字
刚才网友在SKYPE问Insus.NET一个问题,在MS SQL中,怎样找出一个字符串所有数字. Insus.NET使用较简单与平常的方法,就是使用循环的方法,循环字符串中每一个字符,并插入至一个表变 ...
- Java第三大的数,Java通过排序找出数组第三大数字
Java通过排序找出数组第三大数字 1 方式一:对数组进行排序并返回第三大数字 通过对数组进行排序并返回第三大数字,我们可以找到java中的第三大数字.让我们看看完整的示例,以找到java数组中的第三 ...
最新文章
- 原始nginx.conf备份
- Nacos配置中心用法详细介绍
- C++中c_str的用法
- 我的编程学习日志(1)--进制转换
- 给JSP页面加过滤器
- linux ubuntu系统安装dotnet / Azcopy
- socket 接收和发送缓冲区
- python-编程之美
- QtDesigner配置
- 主成分与因子分析异同_浅谈主成分分析与因子分析
- 顺序结构程序设计实例
- C语言编写走迷宫小游戏
- PHP合并两张(多张)图片
- 编程中常见的各种符号英文名字
- 【电脑使用】修改注册表——让有密码的电脑开机自动登录
- wps2019数据分析加载项_《07版office办公软件中的excle中,为什么在加载项里选择了分析工具库,数据分析还是显示不出来?》 wps数据分析加载项...
- CRMEB 商城订单发货功能
- JAVA中excel文件导入日期变成数字解决方案
- css为何不支持父元素选择器
- STM32+ MAX30102通过指尖测量心率+血氧饱和度
热门文章
- python读取txt数据-Python读取txt数据文件,并作图
- linux如何去掉目录背景颜色
- ubuntu18.04下编译mysql5.7源码
- PHP的DES加解密函数 与JAVA兼容
- 网络编程学习笔记(批量输入)
- select元素的各种jquery修改获取添加方法
- 【C#】数据类型(sbyte,byte,short,ushort,int,uint,long,ulong和char。、、、)...
- Ogre 学习笔记 (二) 环境:阴影 、雾效、灯光
- 在Windows下安装配置OpenCV-Python-PyCharm开发环境
- C/C++中判断两个变量是否相等,相减是否为0、大于0或小于0时要特别注意机器误差带来的影响