只出現一次的數字 LeetCode

2021-09-12 19:30:59 字數 792 閱讀 9743

example 2:

input: [4,1,2,1,2]

output: 4

題意:給定乙個非空整數數列,除乙個元素外其他元素均出現兩次,找出只出現一次的那個元素。演算法要求線性時間複雜度,且不使用額外空間。

public

static int singlenumber

(int[

] nums)

}// 如果沒有找到不相等的一組資料,直接返回陣列的最後乙個數字

return nums[nums.length -1]

;}

其中的sort方法顯然不是線性時間複雜度。然後根據單獨數字在有序數列中位置可知單獨出現的數字一定在偶數字(從0開始),故可以將偶數字數字和和奇數字數字之和相減即可得單獨出現數字。

現在給出乙個網上大神的方法。

根據異或運算的特點,相同的數字經過異或運算後結果為0,除單獨出現一次的數字外,其他數字都是出現兩次的,那麼這些數字經過異或運算後結果一定是0。而任何數字與0進行異或運算都是該數字本身。所以對陣列所有元素進行異或運算,運算結果就是題目的答案。

現給出證明:

首先異或運算滿**換律和結合律。

假定數列為 k為只出現一次的數字

則通過交換和結合,異或運算可寫為為(1 ^ 1) ^ (2 ^ 2) ^ …(1000 ^ 1000) ^ k = 0 ^ 0 … ^ k = k;

貼**

class

solution

return num;

}}

參考 鏈結link.

只出現一次的數字

1.乙個整型陣列,有乙個數字出現一次,其餘數字出現兩次,找出這個只出現一次的數字。解題思路 異或運算性質 兩個相同的數字異或得0,0與乙個數字異或得數字本身,而且異或運算是滿足交換律的 陣列元素按位異或,交換律可以想象成相同的數字參與運算的時候是相鄰的 所有出現兩次的數字異或之後得0,最後剩餘的是0...

只出現一次的數字

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

只出現一次的數字

給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素 例 1,2,2 1 方法一 異或 數字1 數字2 每一位如果相同就為0,不同為1 1 1 0 1 0 1 0 1 1 0 0 0 class solution def singlenumber se...