陣列中有4 k 2個整數,其中k個整數出現4次,1個整數出現2次。找出出現2次的那個整數?時間和空間越小越好

時間 2021-06-01 01:30:58

1樓:

可以用快速劃分來做。

如果左邊的元素數NL % 4 == 2,則繼續在左邊找答案。

如果右邊的元素數NR % 4 == 2, 則在右邊找答案。

時間複雜度O(N),空間複雜度O(1)。不需要考慮正負數。

2樓:

給 @Vichare Wang 的答案做個註解。

其方法可概括為:

將陣列 P[i] 中每個整數的對應bit做 i 上的累加,於是就得到每個bit上 1 出現的次數

再將結果 mod 4,會有 00,01,10,11,4種餘數的結果,為每一種分配狀態。

根據題目約束,

每個bit上1要麼出現4的整數倍次,最終狀態餘數為 00 ,(可推斷出現兩次的數在該bit上=0)

要麼還多出2次,最終狀態餘數為 10,(表示出現兩次的數在該bit上=1)

用AB來表示這個狀態,計算過程是不斷的對B做二進位制加法(異或),進製到A:

3樓:Parabola

讓我們簡化一下這個問題:

有 2k+1 個整數,除乙個以外均恰好出現兩次。

經典做法是,將此 2k+1 個整數全部異或(xor)起來。由於 xor 的性質:

A xor A = 0, A xor B = B xor A, A xor 0 = A,易證明最終結果就是只出現一次的那個數。

回到原問題,我們需要構造一種「四數相消」的異或運算。

異或的本質其實是,對於每乙個二進位制位進行模 2 加法運算。

所以此問題只需要改模 2 為模 4 即可(最後將結果除以 2)。

例:[3, 5, 2, 5, 3, 2, 5, 5, 3, 3]二進位制位:

011101

010101

011010

101101

011011

模 4 加法:

020每位除 2,化為十進位制:

010 => 2

時間複雜度 O(n * 位數),額外空間 O(1)。

用4K電視玩PS4和2K電視玩PS4PRO哪個畫質好?

Cried Lee 首先PS4 Pro的不支援1440P輸出,也就是2K,會降級為1080P,這個跟Xbox one x不一樣。其次PS4 Pro在支援的遊戲中,很大一部分是可以選擇解析度優先,幀數優先還是畫質優先,如怪物獵人世界。根據各個遊戲自己的情況可能效果不太一樣,解析度優先就是4K輸出,不過...

3080顯示卡選擇2k顯示器還是4k?

lgzzz 同3080.4k的畫質遠不是2k能比。我個人是兩台顯示器 1080p 280hz 打競技網遊,4k 60 玩單機。只想一台顯示器,建議 3840 1440 的帶魚,略高於2k的畫素,fps遊戲清晰度等於4k 4k切掉一部分上下畫面 非要二選一。那就是4k,和流暢相比,畫質才是最重要的,這...

31 5寸顯示器買2K還是4K?

我目前在用27寸2K144,今年618想換32寸4K 建議如下 無特別需求,2000元出頭品質較高的27寸 2K 60hz IPS夠用。2.4K配32 34很好 如果是21 9的超長顯示器,請注意桌子是不是放得下。3.要不要144 玩電競遊戲 如lol cs 吃雞等 144的提公升肉眼可見,除此以外...