(1)只出現一次的數字

2021-09-22 07:48:16 字數 1132 閱讀 5775

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

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

示例 1:

輸入: [2,2,1]

輸出: 1

示例 2:

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

輸出: 4

思路:利用集合set的元素不可重複性,如果元素不存在set中,則將元素插入到set中,如果插入失敗(set中已有該元素),刪除set中的此元素。不斷迴圈,最終set中只剩下只出現一次的數字。

時間複雜度為o(n)。

**:

public

static

intsinglenumber

(int

nums)

return

(int

)set.

iterator()

.next()

;}

思路:利用hashmap的entry,即,key儲存陣列中的元素,value儲存出現的次數。如果key在hashmap中,則value加1,否則設定key為陣列元素,value為1。

時間複雜度o(n)。

private

static comparable singlenumber2

(int

arr)

int rst =0;

for(map.entry

entry:map.

entryset()

)return rst;

}

思路:異或運算的規則是相同為0,不同為1,0與任何數異或等於任何數。並且異或運算滿**換律。因為只有乙個數出現一次,則其餘數必然出現偶數次,異或結果為0。而0與任何數異或為任何數,即可找出出現一次的數字。

**:

/**

* 使用^運算子:相同為0,不同為1.

* 0與乙個數異或,還是這個數

* @param arr

* @return

*/private

static

intsinglenumber3

(int

arr)

只出現一次的數字

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