LeetCode 只出現一次的數字

2021-08-28 08:58:43 字數 717 閱讀 6782

題目如下:

點此讀題

很幸運,選到了一道秀得我頭皮發麻的題。

題目要求的是從乙個陣列中選出只出現了一次的數字,第一反應就是用求和來解,然而仔細想想好像沒有什麼卵用。你不能證明最後的陣列和與那個只出現了一次的整數有什麼關係,隨隨便便來個偶數陣列就能輕而易舉打破這個假說。

接著就按老思路,看看能不能以排序或者排序的改進方法來解決。發現還是很難,因為要求線性時間複雜度,而排序演算法大部分平均複雜度都達到了o(n^2),顯然是不行的。遍歷常數次的話又不能保證能有個滿意的順序,更何況還有個空間限制。陷入停滯。

這個時候就要想一想一些別的奇技淫巧了。

這道題需要用到的是異或的關係(一開始完全沒有這個想法。。。真的慚愧)。異或中,兩個數相同則返回0,不同則返回1。這樣就極大簡化了題目

若陣列中的任意乙個數都能在陣列找到另乙個相同的數,兩兩異或為0,n個0異或的結果也是0,所以陣列中所有的數異或的結果為0。若最後結果不為0,那麼最後的結果一定是只出現了一次的數,所以想的焦頭爛額最後的結果幾行就搞掂了:

int singlenumber(vector& nums) 

return sign;

}

看來姿勢水平不夠,還是要學習乙個。尤其是做題的時候各種資料結構和位運算一定要記得清清楚楚(#.#)

只出現一次的數

給定乙個整數陣列 nums,其中恰好有兩個元素只出現一次,其他所有元素均出現兩次。找出只出現一次的那兩個元素。示例 給定 nums 1,2,1,3,2,5 返回 3,5 注意 結果的順序並不重要,對於上面的例子 5,3 也是正確答案。你的演算法應該具有線性複雜度,你能否僅使用恆定的空間複雜度來實現它...

只出現一次的數

問題描述 給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。解決思路 將陣列中元素全部異或,根據異或特點,出現兩次的元素異或後結果為0,陣列全部異或之後的結果就是只出現一次的那個元素。實現 int singlenumber vector int n...

只出現一次的數

問題 有n個數,其中只有乙個數出現一次,其他的都出現兩次,求這個數 空間複雜度為常數 全部xor起來即可 include includeusing namespace std int main printf d n xor sum return 0 1231 3 1 51 2 3 2 3 inclu...