题目描述:一个数组元素在 [1, n] 之间,其中一些数被替换为另一些数,导致重复和丢失,找出重复的数和丢失的数。
leetcode上可解题目:
645 一个元素被替换,寻找丢失和重复元素
448 寻找所有丢失的元素
442 寻找所有重复的元素
要求:时间复杂度小于O(N^2)
输入:nums = {4,2,1,2};
输出:重复的数:2
丢失的数:3
解题思路1:使用HashSet,判断重复元素和1-n中缺少的数,时间复杂度O(N),空间复杂度O(N)
public int[] findErrorNums(int[] nums) {
Set<Integer> set = new HashSet<Integer>();
int[] ans = new int[2];
for(int i = 0;i<nums.length;i++){
if(!set.add(nums[i])){
ans[0] = nums[i];
}
}
for(int i = 1;i<=nums.length;i++){
if(!set.contains(i)){
ans[1] = i;
break;
}
}
return ans;
}
解题思路2:通过使当前位与后面的数字交换使每个数在正确的位置上,时间