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};
    }
}

results matching ""

    No results matching ""