645.Set Mismatch
https://leetcode.com/problems/set-mismatch/solution/
1-Math + HashSet
class Solution {
public int[] findErrorNums(int[] nums) {
double sum = 0.0;
Set<Integer> set = new HashSet<>();
int[] ans = new int[2];
int n = nums.length;
for(int i = 0; i < nums.length; i++){
sum += nums[i];
if(set.contains(nums[i])){
ans[0] = nums[i];
}
set.add(nums[i]);
}
double rightSum = (1.0 + n) * n / 2;
double diff = rightSum - sum;
int missingNum = (int) diff + ans[0];
ans[1] = missingNum;
return ans;
}
}
2 - Using Sorting
3 - Inplace
class Solution {
public int[] findErrorNums(int[] nums) {
int dup = -1;
int missing = 1;
for(int i = 0; i < nums.length; i++){
int n = nums[i];
if(nums[Math.abs(n) - 1] < 0)
dup = Math.abs(n);
else
nums[Math.abs(n) -1] *= -1;
}
for(int i = 1; i < nums.length; i++){
if(nums[i] > 0)
missing = i + 1;
}
return new int[]{dup, missing};
}
}