题目描述:
数字1~1000放在含有1001个元素的数组中,其中只有唯一的一个元素值重复,其他数字均为一次。设计一个算法,将重复元素找出来,要求每个数组元素只能访问一次。如果不使用辅助存储空间设计一个算法实现。
分析:
在一个有且只有一个元素值重复的数组中找出这个唯一的重复元素,而限定条件就是每个数组元素只能访问一次,并且不许使用辅助存储空间。显然,从前面对Hash法的分析可知,如果题目没有是否可以使用辅助数组限制,最简单的方法就是使用Hash法。
当使用Hash法时,具体过程:首先定义一个长度为1000的Hash数组,将Hash数组中的元素都对初始化为0,将原数组中的元素逐一映射到该Has是数组中,当对应的Hash数组中的值为0时,则置该Hash元素中的值为1,当对应的Hash数组中该处的值为1时,则表明该位置的数载原数组中是重复的,输出即可。
实现代码如下:
package lock;
import java.util.Hashtable;
public class T1 {
public static int findDup(int[] array)
{
if(null==array)
return -1;
int len=array.length;
Hashtable<Integer,Integer>hashtable=new Hashtable<>();
int i;
for(i=0;i<len-1;i++)
hashtable.put(i, 0);
for(i=0;i<len;i++)
{
if(hashtable.get(array[i]-1)==0)
{
hashtable.put(array[i]-1,array[i]-1);
}
else
{
return array[i];
}
}
return -1;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int array[]= {1,3,4,2,5,3};
System.out.println(findDup(array));
}
}