Set Mismatch

easy array hash map bit manipulation

Problem

nums was originally [1, 2, ..., n] but one number got duplicated (replacing another). Return [duplicate, missing].

Inputnums = [1, 2, 2, 4]
Output[2, 3]
2 appears twice; 3 is missing.

def find_error_nums(nums):
    dup = -1
    for x in nums:
        i = abs(x) - 1
        if nums[i] < 0:
            dup = abs(x)
        else:
            nums[i] = -nums[i]
    miss = -1
    for i, v in enumerate(nums):
        if v > 0:
            miss = i + 1
            break
    return [dup, miss]
function findErrorNums(nums) {
  let dup = -1;
  for (const x of nums) {
    const i = Math.abs(x) - 1;
    if (nums[i] < 0) dup = Math.abs(x);
    else nums[i] = -nums[i];
  }
  let miss = -1;
  for (let i = 0; i < nums.length; i++) {
    if (nums[i] > 0) { miss = i + 1; break; }
  }
  return [dup, miss];
}
class Solution {
    public int[] findErrorNums(int[] nums) {
        int dup = -1;
        for (int x : nums) {
            int i = Math.abs(x) - 1;
            if (nums[i] < 0) dup = Math.abs(x);
            else nums[i] = -nums[i];
        }
        int miss = -1;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] > 0) { miss = i + 1; break; }
        }
        return new int[]{dup, miss};
    }
}
vector<int> findErrorNums(vector<int>& nums) {
    int dup = -1;
    for (int x : nums) {
        int i = abs(x) - 1;
        if (nums[i] < 0) dup = abs(x);
        else nums[i] = -nums[i];
    }
    int miss = -1;
    for (int i = 0; i < (int)nums.size(); i++) {
        if (nums[i] > 0) { miss = i + 1; break; }
    }
    return {dup, miss};
}
Time: O(n) Space: O(1) in place