1000个无序数查找两个重复数
来源:互联网 发布:电热毯 水暖毯 知乎 编辑:程序博客网 时间:2024/04/30 07:59
按位异或运算符: ^
两个相同的数按位异或结果为0
任何数和零按位异或结果为这个数本身
根据按位异或的以上特性, 我们可以为下面这首题目给出一个简便的算法:
有一个长度为10000的数列, 存放着1-10000的自然数, 连续, 不重复, 但数列并不是有序的
现在随机选取1-10000之间的某个自然数, 加入到这个数列中, 要求用简便的算法找到这个后来加入的数
分析一下, 这个问题是肯定不能用序列中数之和减去1-1000数列和的办法的, 这样做可能会造成溢出, 首先排除.
第二, 有的人认为这个题目说的是有序数组, 我觉得应该不是的. 如果数组是有序的, 只要比较前后两个数是否相差1就可以很快速也很容易找到重复数.
而这种问题非常适合异或(如果不是数值类型, 则不适合), 因为上面讲的按位异或运算符的两个特性, 可得1^1=0, 1^1^2=2, 1^2^1^2^3=3…
所以, 数组中10001个数的"异或和"再与1-1000异或可得重复的那个数.
异或查找:
int xor = 0;for (int i = 0; i <= list.Max; i++){ xor ^= list[i]; xor ^= i;}
- 1000个无序数查找两个重复数
- 如何产生1000万个无序数
- 查找重复的数
- 查找无序数中最大k个数
- 从一个无序的数组中查找二个遗漏的数
- 无序数组中找第K个的数
- 从一个无序的数组中查找遗漏的数
- 二分查找-有重复数和无重复数
- 无序数组寻找两个数为指定和X
- 在一个数组中查找两个重复出现两次的数
- 十个数无序排列
- 无序数关系
- 一个N个整数的无序数组,给你一个数sum,求出数组中是否存在两个数,使他们的和为sum
- 一个N个整数的无序数组,给你一个数sum,求出数组中是否存在两个数,使他们的和为sum
- 找到N个无序数中第M大的数
- 关于求N个无序数中第K大的数。
- 冒泡排序将10个无序数按照从小到大输出
- 华为:查找最大的不重复数
- 常见Sqlite管理工具
- 小宝,小宝,我爱你
- 参数传递中,指针本身不改变
- 系统集成项目管理工程师笔记(4)项目管理一般知识
- Java内存泄露测试及工具
- 1000个无序数查找两个重复数
- 一个在线测试Html、脚本代码的网站!(不用建文件了)
- 如何在win7系统中将IE图标拖到桌面上来非快捷方式
- PLC-电力载波技术
- 关于PhoneGap的7件事
- mutex 和 spinlock 对比
- Python Django还是Ruby on Rails
- 时钟五
- 使用多维safearray时值得注意的地方