0645. Set Mismatch

645. Set Mismatch #

题目 #

集合 s 包含从 1n 的整数。但集合 丢失了一个数字有一个数字重复

给定数组 nums 代表集合 s 发生错误后的结果。

先找出重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。

思路 #

代码 #

class Solution {
    public int[] findErrorNums(int[] nums) {
        int[] ans = new int[2];
        
        /** 另 1~n 与 nums 进行异或操作,返回值为 missing ^ duplicate */
        int xor = 0;
        int[] appearance = new int[nums.length];
        for (int i = 0; i < nums.length; i++) {
            xor ^= (i + 1) ^ nums[i];
            appearance[nums[i] - 1] += 1;
            if (appearance[nums[i] - 1] == 2) ans[0] = nums[i];
        }
        
        /** missing = missing ^ duplicate ^ duplicate */
        ans[1] = xor ^ ans[0];
        
        return ans;
    }
}