645. 错误的集合

集合 s 包含从 1 到 n 的整数。不幸的是,因为数据错误,导致集合里面某一个数字复制了成了集合里面的另外一个数字的值,导致集合 丢失了一个数字 并且 有一个数字重复 。

给定一个数组 nums 代表了集合 S 发生错误后的结果。

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/set-mismatch
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

将数字放在它的位置

class Solution {

    private void swap(int[] nums, int a, int b) {
        int t = nums[a];
        nums[a] = nums[b];
        nums[b] = t;
    }

    public int[] findErrorNums(int[] nums) {
        if (nums == null || nums.length <= 1) {
            return new int[0];
        }
        int[] ans = new int[2];
        int index = 0;
        int right = nums.length - 1;
        while (index <= right) {
            if (nums[index] == index + 1) {
                index++;
            } else if (nums[index] <= index || nums[nums[index] - 1] == nums[index]) {
                ans[0] = nums[index];
                swap(nums, index, right--);
            } else {
                swap(nums, index, nums[index] - 1);
            }
        }
        ans[1] = index + 1;
        return ans;
    }

    public static void main(String[] args) {
        int[] nums = {1, 1};
        new Solution().findErrorNums(nums);
    }
}

位运算

class Solution {
    public int[] findErrorNums(int[] nums) {
        int n = nums.length;
        int xor = 0;
        for (int num : nums) {
            xor ^= num;
        }
        for (int i = 1; i <= n; i++) {
            xor ^= i;
        }
        int lowbit = xor & (-xor);
        int num1 = 0, num2 = 0;
        for (int num : nums) {
            if ((num & lowbit) == 0) {
                num1 ^= num;
            } else {
                num2 ^= num;
            }
        }
        for (int i = 1; i <= n; i++) {
            if ((i & lowbit) == 0) {
                num1 ^= i;
            } else {
                num2 ^= i;
            }
        }
        for (int num : nums) {
            if (num == num1) {
                return new int[]{num1, num2};
            }
        }
        return new int[]{num2, num1};
    }
}

posted @ 2022-01-22 13:05  Tianyiya  阅读(31)  评论(0)    收藏  举报