错误的集合—题目
解题思路(哈希表法)
-
重复的数字在数组中出现两次,丢失的数字在数组中出现0次。其余的每个数字在数组中出现一次。因此,可以使用哈希表记录每个元素在数组中出现的次数,然后遍历从1到n的每个数字,
-
分别找到出现2次和出现0次的数字,即为重复的数字和丢失的数字
所需知识
- 创建HashMap的实例化对象
- map.put() 方法、getOrDefault()方法的使用。
代码及运行结果
class Solution{
public int[] findErrorNums(int[] nums){
int[] errorNums=new int[2];
//定义一个返回数组
int n=nums.length;
//length方法不用带括号
Map<Integer,Integer> map=new HashMap<Integer,Integer>();
//采用多态的方式定义哈希表。 哈希表本质是图,HashMap属于Map
//对于有Map参与的题,其中数组的遍历统一采用新建一个数组,使用加强版的for循环。即for(int num:nums)
for(int num:nums){
map.put(num,map.getOrDefault(num,0)+1);
//如果map集合中有num中这个key时,就使用这个key对应的value值,如果没有就使用默认值0,然后+1添加到map中,代表num出现的次数
}
for(int i=1;i<=n;i++){
int count =map.getOrDefault(i,0);
//获取key为i的value值,如果不存在,则返回默认值0.
if(count==2){
errorNums[0]=i;
//出现了两次,则代表为重复元素
}else if(count==0){
errorNums[1]=i;
//出现0次则代表为缺失元素
}
}
return errorNums;
}
}
执行结果