136 只出現一次的數字

2021-10-01 04:45:21 字數 1538 閱讀 4767

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

說明:

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

示例 1:

輸入:[2

,2,1

]輸出:

1

示例 2:

輸入:[4

,1,2

,1,2

]輸出:

4

用乙個字典來儲存訪問過的數字(鍵),以及該數字出現的次數(值)。首先,遍歷陣列構建字典。然後,遍歷字典,找出值為1對應的鍵,即為只出現一次的數字。

class

solution

else

// 第二次遍歷該數字

map.

put(nums[i],2

);}int key =0;

int value =0;

iterator it = map.

entryset()

.iterator()

;while

(it.

hasnext()

)}return key;

}}

依次遍歷陣列元素,並將該元素存入集合中,如果該集合已經存在該元素,則將該元素刪除。

遍歷完陣列,最後集合只剩下乙個元素,即為只出現一次的數字。

class

solution

int num =0;

for(

int a: set)

num = a;

// 獲取只出現一次的數字

return num;

}}

2*(a+b+c) - (a+a+b+b+c) = c,可得:陣列中的數字組成的集合的數字和的2倍,減去陣列數字和,即為只出現一次的數字。

class

solution

int sum2 =0;

for(

int a: set)

// 計算集合的數字和

sum2 += a;

return sum2*

2- sum1;

// 2*(a+b+c) - (a+a+b+b+c) = c

}}

按位異或運算滿足:

a ^ 0 = aa ^ a = 0交換律和結合律:a ^ b ^ c ^ b ^ c = a ^ (b ^ b) ^ (c ^ c) = a ^ 0 ^ 0 = a ^ 0 = a

所以,只需要陣列中的所有元素,一起做異或運算,即可得到最終的結果。

class

solution

}

如有不當之處,歡迎讀者批評指正!

136 只出現一次的數字

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

136 只出現一次的數字

給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。說明 你的演算法應該具有線性時間複雜度。你可以不使用額外空間來實現嗎?示例 1 輸入 2,2,1 輸出 1 示例 2 輸入 4,1,2,1,2 輸出 4 異或運算滿足交換律,如a b c等同於c b...

136 只出現一次的數字

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