数组中寻找重复的数
来源:互联网 发布:知乎周刊 pdf 下载 编辑:程序博客网 时间:2024/04/29 13:57
题目:
有一个数组a[100],其中存储了1-99的整数,且只有一个数字是重复的。且数组无序。
要求实现一个算法给出这个重复的数(要求考虑时间复杂性和空间复杂性)。方法1:按位异或,利用a^b^b=a的原理,(推荐)
xor = a[0]^a[1]^.....a[99]
重复的那个值 = xor^1^2^3······98^99
方法二:利用和sum1=1+2+3+.....99; (推荐)
sum2=a[0]+a[1]+.....a[99];
sum2-sum1=重复的那个值
方法三:利用Set的不可重复属性
遍历一次数组,一次插入到set中,每插入一次就检查set的长度是否发生了变化。不过这个方法空间复杂度为O(n)
方法四:利用hash。开辟长度即为100的新数组.遍历插入,检查是否存在冲突,若存在就可断定其为重复值。
#include "stdafx.h"#include <STDIO.H>#define MAX 100int main(int argc, char* argv[]){int testArray[MAX];for (int i=0;i<MAX-1;i++)//初始化{testArray[i] = i+1;}testArray[MAX-1] = 7;//假定重复的数是 7 //按位异或计算int xor = 0;//按位异或for (i = 0; i < MAX; i++){xor ^= testArray[i];xor ^= i;}printf("按位异或计算,重复的数是:%d\n",xor);//利用求和int sum = 0;//按位异或for (i = 0; i < MAX; i++){sum += testArray[i];}int sum2 = (1+(MAX-1))*(MAX-1)/2;printf("按求和方法计算,重复的数是:%d\n",sum-sum2);return 0;}
结果:
- 数组中寻找重复的数
- 寻找重复的数
- 寻找重复的数
- 微软面试题 寻找数组中出现的唯一重复的一个数
- 【算法】寻找数组中出现的唯一重复的一个数
- 微软面试题 寻找数组中出现的唯一重复的一个数
- 数组中重复的数
- 数组中重复的数
- 数组中重复的数
- 数组中重复的数
- 数组中重复的数
- 寻找数组中过半的数
- 寻找数组中唯一的数
- 寻找重复的数-LintCode
- 寻找数组中丢失的、者重复的、或者出现一次的的数的问题汇总
- 从一堆(大量的)无序不重复数组成的数组中寻找一指定数出现的位置
- 位图法寻找数组中重复出现的数字
- 编程之美 N个正整数的数组 寻找丢失的数 和 寻找唯一重复的数
- OpenSSL简介
- 基于jdbc+mysql的数据库连接
- java二维码生成与解析代码实现
- Oracle问题汇总!
- How to query_posts using meta_query to orderby meta_key AND have a secondary sort by date?
- 数组中寻找重复的数
- SSH 连接慢: Get POSSIBLE BREAK-IN ATTEMPT msg when i ssh to s server
- strcpy()、memcpy()、memmove()、memset()的实现
- test_imfopage
- 深入理解HTML5:语义、标准与样式
- failed to load the jni shared library"/usr/local/java/jdk1.6.0_21/bin/../jre/lib/i386/client/libjvm.
- [翻译][Trident] Storm Trident state 原理
- “珠玑之椟”系列简介与索引
- spring 的singleton 和prototype的区别和应用场合