LeetCode刷題 136 只出現一次的數字

2022-03-22 00:40:38 字數 1196 閱讀 6757

給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。

說明:你的演算法應該具有線性時間複雜度。 你可以不使用額外空間來實現嗎?

示例 1:

輸入: [2,2,1]

輸出: 1

示例 2:

輸入: [4,1,2,1,2]

輸出: 4

通過異或運算(兩者相等為0,不等為1.)

1^1=0

0^0=0

1^0=1

0^1=1

1.交換律:a ^ b ^ c <=> a ^ c ^ b

2.任何數於0異或為任何數 0 ^ n => n

3.相同的數異或為0: n ^ n => 0

如: 2 的二進位制為 : 0010

1 的二進位制為 : 0001

4 的二進位制為 : 0100

例項1中:逐步預算

2^2 = 0000 = 0

1^0 =  0001 = 1

等價為 : 2^2^1 = 0^1 = 1

例項2中:逐步運算

4^1 => 0100 ^ 0001 => 0101 = 5

5^2 => 0101 ^ 0010 => 0111 = 7

7^1 => 0111 ^ 0001 => 0110 = 6

6^2 => 0110 ^ 0010 => 0100 = 4

等價為 : 4^1^2^1^2 => 4^1^1^2^2 => 4^(1^1)^(2^2) => 4^0^0 = 4(相同的數異或為0: n ^ n => 0)

衍生出的面試題:

int a = 10,b=20;交換兩個數的值:

常規寫法:

int temp = 0;

temp  = a;

a = b;

b = temp;

那麼不定義第三方變數,交換兩個數的值:

a=a+b;

b=a-b;

a=a-b;  //可能會存在a+b的值超過型別的大小,所以要謹慎。

接下來的就是使用異或:

a=a^b;

b=a^b;

a=a^b; 

逐步運算

a = a ^ b;

b = a ^ b  = (a ^ b) ^ b = a ;

a = a ^ b = (a ^ b) ^ (a ^ b) ^ b  = b;

LeetCode刷題 136只出現一次的數字

這道題來自於leetcode官方編輯的初級演算法裡面陣列這一類別的題目,這道題目很簡單,本來不打算記錄的,但是這道題的解法我感覺還是挺有意思的,於是還是打算稍微記錄一下,加深印象,以便日後遇到這樣的題目可以想到類似方法。在看這道題之前,先看一下另一道類似的題目 存在重複元素 這道題要求我們判斷陣列中...

LeetCode演算法題136 只出現一次的數字解析

給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。說明 你的演算法應該具有線性時間複雜度。你可以不使用額外空間來實現嗎?示例1 輸入 2,2,1 輸出 1示例2 輸入 4,1,2,1,2 輸出 4這個題首先可以想到使用棧,因為之前括號匹配題和這個相...

LeetCode 第136題 只出現一次的數

題目 給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。說明 你的演算法應該具有線性時間複雜度。你可以不使用額外空間來實現嗎?示例 1 輸入 2,2,1 輸出 1 示例 2 輸入 4,1,2,1,2 輸出 4 package leetcode 20...