尋找出現一次的數

2022-03-04 05:10:23 字數 375 閱讀 7468

分析:如果這裡的陣列a的規模比較小,在記憶體的可以容納的範圍之內,可以建立hash表,順序掃瞄a中的每乙個 數,統計每個數的出現次數,最後找出僅出現一次的數即可,時間複雜度為o(n),空間複雜度為o(n)。如果陣列a的規模很大呢?難道是進行外排序,然後 通過merge的方式找到嗎?有沒有更好的額方式?

如果這裡的數不是出現三次而是出現兩次,我們可以使用異或的方式將所有的數進行異或,最後的結果自然是僅出現一次的數,空間複雜度將為o(1)。這裡考慮將數表達成3進製,每一位的異或操作:

這樣,相同的三個數的同一位的異或值一定為0,0與x的異或等於x。通過將所有的數表示成三進製,一起異或,最後的結果為僅出現一次的數,所用的空間複雜度為o(1)。

尋找出現一次的數

找出陣列中只出現一次的數

今天來看一道有意思的題,看起來很簡單,但是要想到滿足要求的答案沒那麼容易。有乙個非空整形陣列,除了有乙個只出現過一次的數,其他的數都出現且只出現過兩次,現要求找出這個只出現過一次的數。時間複雜度不能超過 o n 而且不能使用額外空間。大概意思就是,比如從 5,5,8,8,6,9,9 陣列中找出 6 ...

尋找陣列中只出現一次的數

首先來看題目要求 在乙個陣列中除兩個數字只出現1次外,其它數字都出現了2次,要求盡快找出這兩個數字。考慮下這個題目的簡化版 陣列中除乙個數字只出現1次外,其它數字都成對出現,要求盡快找出這個數字。這個題目在之前的 位操作基礎篇之位操作全面總結 中的 位操作趣味應用 中就已經給出解答了。根據異或運算的...

找出陣列中只出現過一次的數

乙個大陣列,在1到25000之間,只有4k memory,列印出其中正好只出現過一次的數。沒出現過,出現過2次,3次,或更多,都不列印。solutions 1 位圖法,但每個數有3個狀態 0,1,1.因此需要2 bit,25000 2 8 1024 6.1k,記憶體占用符合要求。2 壓縮,解法1中,...