Rust 只出現一次的數字 兩種解法

2022-03-10 07:47:56 字數 876 閱讀 1959

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

說明:

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

示例 1:

輸入:[2,2,1]輸出:1
示例 2:

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

第一種自己寫的想法比較簡單leetcode 耗時 0ms; 我感覺有問題,可能會多一點。

解決思路:

仔細審題發現每個元素均出現兩次,也就是說經過排序後一定會有下面三種情況出現

abbcc  在最左邊

bbacc  在最中間,出現在中間這種情況長度一定超過或等於5

bbcca  在最右邊

下面是**,通過比對 i-1,1-2 和 i+1 , i+2 的大小,確定上述形式

let mut v = nums;

v.sort();

let len = v.len();

if len == 1

if v[0]!=v[1]&&v[1]==v[2]

if v[len-3]==v[len-2]&&v[len-2]!=v[len-1]

for i in 2..len-2

}unreachable!()

第二種使用異或運算一行**解決

nums.iter().fold(0, |a, x| a ^ x)

只出現一次的數字

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