1到100,放在长度99的数组里,有一个没有在里面,编程找出那个数
利用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初值为0for(int i=1;i<=100;i++){map.put(i, 0);}//遍历数组,找到一个数字,就更新对应的vaule为1for(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();}}//找不到返回0return 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);}}