只出現一次的數字 LeetCode

2022-05-25 08:42:11 字數 1166 閱讀 5094

題目:

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

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

示例 1:

輸入: [2,2,1]

輸出: 1

示例 2:

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

輸出: 4

審題:除了某個元素只出現一次以外,其餘每個元素均出現兩次

1、線性時間複雜度:要求我們的**時間複雜度最高為o(n),不能有巢狀迴圈等。

2、不使用額外空間:要求空間複雜度最高為o(1)。

解題:方法一:(異或法)

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

還有重要的一點就是:a ⊕ b ⊕ a = b.

上**:

1

class

solution

7return

num;

8}

9 }

方法二:(比較法)

思路:先對陣列進行排序,然後對nums[i]和nums[i+1]進行比較,如相等,i += 2,繼續下一組比較,知道取到不想等的一組。

注意:首先這個陣列的長度肯定是奇數(目標數字只出現一次,其他所有數字出現兩次),所以如果上述步驟沒有找到不相等的一組數,那麼肯定是陣列的最後乙個數字是單獨出現的。

**如下:

class

solution

}return nums[nums.length-1];

}}

這種方法由於使用了arrays.sot(int a)方法,時間複雜度是o(n3),不符合線性時間複雜度。

只出現一次的數字

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...