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

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

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

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

就是用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;
}

}   
}

}

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

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

就是效率低了点~~~~

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