61.数组中只出现一次的两个数字

一个整型数组里除了两个数字之外,其他的数字都出现了两次。

请写程序找出这两个只出现一次的数字。

你可以假设这两个数字一定存在。

数据范围:

数组长度 [1,1000]。

样例:

输入:[1,2,3,3,4,4]
输出:[1,2]

代码:

class Solution {
    public int[] findNumsAppearOnce(int[] nums) {
        //初始化一个变量用于存储所有数字的异或结果
        int temp = 0;
        //遍历数组,计算数字的异或结果
        //计算后的结果temp即为x^y的结果,我们需要将temp分离,找到x,y
        for(int i = 0;i<nums.length;i++)temp^=nums[i];
        //找到temp中第一个为1的位,这个位可以用来区分两个不同的数字
        int k = 0;
        while((temp>>k&1)==0)k++;
        //初始化两个变量x,y来存储最终结果
        int x = 0,y = 0;
        //遍历数组,根据第k位是否为1将数组分为两部分,并计算异或结果
        for(int i = 0;i<nums.length;i++){
            if((nums[i]>>k&1)==1)x^=nums[i];
        }
        //另一个数字可以通过异或temp和x得到
        y = x^temp;
        //返回结果数组
        return new int[]{x,y};
    }
}
posted @ 2025-06-01 08:42  回忆、少年  阅读(14)  评论(0)    收藏  举报