2 baidu 24736703 baidu_24736703 于 2016.04.24 17:50 提问

面试时遇到的算法问题,到现在也没解答出来

如何从乱序的1001个整数中找出唯一的两个相同的数!求大神解答

5个回答

w172087242
w172087242   Ds   Rxr 2016.04.24 18:19

用hashset来计算,只要遍历一次就可以了;
hashset的add方法返回值来判断原有整数是否存在,不存在会返回true,存在返回false。
存在代表着找到了重复的数字。

maomao977
maomao977   2016.04.24 19:30

从二进制的角度来考虑,1000个数字两两不同,同或运算,则为0,则剩下的那个数就是你要找的。

u012155923
u012155923   2016.04.24 17:55

可以用额外的存储空间么?可以的话就比较容易

wulijuan888
wulijuan888   2016.04.24 18:35

就是用for循环来查找,你还有什么其他的限制的条件吗?

package day0424_乱序数组查找相同值;

import java.util.Scanner;

public class TestSort {
public static void main(String[] args) {
int [] a = new int [1001];
for(int i=0;i<1001;i++){
System.out.println("请输入1001个整数:");
a [i] = new Scanner(System.in).nextInt();
}
int num = 0;
for(int i=0;i<a.length-1;i++){
for(int j=i+1;j<a.length;j++){
if(a[j]==0){
break;
}
if(a[i]==a[j]){
//System.out.println(a[i]);
num = a[i];
System.out.println("你要查找的重复值为"+num+",分别是第"+(i+1)+"个,和第"+(j+1)+"个。");
break;
}
}
if(num!=0){
break;
}

}   
}

}

sinat_29830917
sinat_29830917   2016.04.24 19:24

如果不考虑效率的话,两个for嵌套就好了 = =。
假设值在数组中 a[1001]中= =

 for(int i = 0;i < 999;i++)
     for(j = 1;j < 1000;j++)
        if(a[i] = a[j])
            return 1;

就是效率低了点~~~~

everysmile
everysmile if(a[i] == a[j]) 吧?
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!