Single Number

Given an array of integers, every element appears twice except for one. Find that single one. Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?

A tricky solution:

(defn single-number
  [array]
    (reduce (fn [a b] (bit-xor a b)) array))
    (single-number [1 1 2 3 3 4 4])

Bit manipulation

  • n ^ n = 0
  • 0 ^ n = n

=> 1 ^ 1 ^ 2 ^ 3 ^ 3 = 2