利用hashmap,首先将100个数字存入map中,value初始为0;然后遍历数组,找到一个数字,把value更新为1,这样遍历完成后,就找到了那个被遗弃的数字了。
代码如下。
package go.derek;
import java.util.*;
public class FindNum {
public int find(int[] arr){
Map<Integer,Integer> map=new HashMap<>();
//初始化,将1-100都放到map里面,value初值为0
for(int i=1;i<=100;i++){
map.put(i, 0);
}
//遍历数组,找到一个数字,就更新对应的vaule为1
for(int i=0;i<arr.length;i++){
map.put(arr[i], 1);
}
//遍历map,如果发现value为0,则找到被遗弃数字了,返回
for(Map.Entry<Integer,Integer> m:map.entrySet()){
if(m.getValue()==0){
return m.getKey();
}
}
//找不到返回0
return 0;
}
//测试
public static void main(String[] args){
List<Integer> list=new ArrayList<>();
int[] arr=new int[99];
Random rd=new Random();
//随机生成长度99的数组,不包含重复数字
while(list.size()<99){
int a=rd.nextInt(100)+1;
if(!list.contains(a)){
list.add(a);
}
}
//将list中的值赋给数组
for(int i=0;i<99;i++){
arr[i]=list.get(i);
}
//将数组排序,以便观察检验
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
int x=new FindNum().find(arr);
//控制台打印出所求数字
System.out.println(x);
}
}