1. 程式人生 > >Leetcode 136. Single Number

Leetcode 136. Single Number

ram splay eve could set tle without where 運算

Given an 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?

  這道題目的時間復雜度必須是O(n),並且空間復雜度為O(1),使得不能用排序方法,也不能使用map數據結構。那麽只能另辟蹊徑,需要用位操作Bit Operation來解此題。

  這裏用到邏輯異或的兩個性質:

  一:相同的兩個int型數據 ^ 之後為0

  二:邏輯異或滿足交換律、結合律,即對於題目中的數組可以看成是先把元素排好序相同的放在一塊進行異或運算,與元素的參加運算的順序無關。

  邏輯異或的運算真值表:

輸入 運算符 輸入 結果
1 0 1
1 1 0
0 0 0
0 1 1

代碼:

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

Leetcode 136. Single Number