题目:
集合 s 包含从 1 到 n 的整数。不幸的是,因为数据错误,导致集合里面某一个数字复制了成了集合里面的另外一个数字的值,导致集合 丢失了一个数字 并且 有一个数字重复 。
给定一个数组 nums 代表了集合 S 发生错误后的结果。
请你找出重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。
示例 1:
输入:nums = [1,2,2,4]
输出:[2,3]
示例 2:
输入:nums = [1,1]
输出:[1,2]
提示:
2 <= nums.length <= 104
1 <= nums[i] <= 104
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/set-mismatch
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
package FindErrorNums;
import java.util.Arrays;
import java.util.HashMap;
public class FindErrorNums {
public int[] findErrorNums(int[] nums){
int[] result = new int[2];
//创建一个哈希表map
HashMap<Integer, Integer> map = new HashMap<>();
//查看数组中的每个数字,数字本身作为key,出现次数作为value,存到哈希表中
for(int num: nums){
map.put(num,map.getOrDefault(num,0)+1);
}
//从1到n,查找是哪个数字重复了,以及哪个数字没有出现,count等于哈希表中对应的value,即出现次数
for(int i = 1; i <= nums.length; i++){
int count = map.getOrDefault(i,0);
//该数出现了2次,放到结果的第一位
if(count == 2){
result[0] = i;
//该数被漏掉了,放到结果的第二位
}else if(count == 0){
result[1] = i;
}
}
return result;
}
public static void main(String[] args) {
FindErrorNums test = new FindErrorNums();
int[] test1 = {1,2,2,4};
int[] test2 = {1,1};
System.out.println(Arrays.toString(test.findErrorNums(test1)));
//[2,3]
System.out.println(Arrays.toString(test.findErrorNums(test2)));
//[1,2]
}
}