Rust 只出現一次的數字 兩種解法
阿新 • • 發佈:2020-07-27
給定一個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。
說明:
你的演算法應該具有線性時間複雜度。 你可以不使用額外空間來實現嗎?
示例 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 { return v[0]; } if v[0]!=v[1]&&v[1]==v[2]{ return v[0]; } if v[len-3]==v[len-2]&&v[len-2]!=v[len-1]{ return v[len-1]; } for i in 2..len-2 { if v[i-1] == v[i-2] && v[i+1] ==v[i+2] { return v[i]; } } return 0
第二種使用異或運算一行程式碼解決
nums.iter().fold(0, |a, x| a ^ x)