L136. Single Number

Problem:

Given a non-empty array of integers, every element appears twice except for one. Find that single one.

Note:

Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?

Example 1:

Input: [2,2,1]
Output: 1

Example 2:

Input: [4,1,2,1,2]
Output: 4

Solution:

  • If we take XOR of zero and some bit, it will return that bit

    • a⊕0=a

    If we take XOR of two same bits, it will return 0

    • a⊕a=0

    • a⊕b⊕a=(a⊕a)⊕b=0⊕b=b

    So we can XOR all bits together to find the unique number.

  • 0和任何数偶异或都还是那个数

public int singleNumber(int[] nums) {
    if(nums == null || nums.length == 0) throw new IllegalArgumentException();
    int res = 0;
    for(int i = 0; i < nums.length; i++){
        res ^= nums[i];
    }
    return res;
}

Last updated

Was this helpful?