1. 程式人生 > 實用技巧 >Rust 只出現一次的數字 兩種解法

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

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

說明:

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

示例 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)