1. 程式人生 > >LeetCode#136: Single Number

LeetCode#136: Single Number

Description

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

Example

Example 1:

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

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

Solution

此題可以使用HashMap輕鬆的解決,但是還存在另一種更為簡潔且效率更高的做法。

我們可以使用異或的思想,一個數和自己異或的結果是0,一個數和0異或的結果則是那個數本身:

A ^ A = 0
A ^ 0 = A

而此題中要找到唯一一個只出現一次的數字,那麼可以把陣列中所有數字進行異或,出現兩次的數字異或結果為0,最終便是0和唯一一個只出現一次的數字進行異或,得到的結果也就是那個數字:

class Solution {
    public int singleNumber(int[] nums) {
    	int a = 0;
    	for(int num : nums)
    		a ^= num;
    	return a;
    }
}