在其餘數都出現3次,找到恰好出現一次的那個數

2022-04-30 12:42:14 字數 571 閱讀 2344

分析:考慮一下答案,因為n-1個數中每個數都會出現3次,那麼這些數對應的二進位制為也就是出現3次

剩下那個是只出現一次,舉個栗子 n=4  3 3 3 1

那麼二進位制表示

也就是說,找到二進位制下%3意義下出現1次的那些二進位制,模擬一下就ok  複雜度o(n*32)

不過可以考慮簡化一下,增加乙個變數模擬一下%3的過程,先只考慮乙個二進位制位,如何實現%3的+

0 01 0

0 10 0

大致就是表示,even=odd&1   odd^=1  p=~(even&odd)   even&=p  odd&=p

然後把這個結論擴充套件到32位就行了

#include#define rep(i,a,b) for(int i=a;i<=b;i++)

#define per(i,a,b) for(int i=a;i>=b;i--)

using namespace std;

const int maxn=1e5+5;

int n,val;

int main()

cout

}

在其他數都出現k次的陣列中找到只出現一次的數

這一類問題可以統稱為single num的問題。主要涉及的知識是位運算。最初是在牛客網上碰到了k 2和k 3的題目,在左老師的書中看到了一般情況,這裡來總結一下。k 2時 public class solution res res a i 3 至於為什麼採用異或來求解這個問題,左老師在書中是這樣說的...

在其他數都出現k次的陣列中找到只出現一次的數

題目 給定乙個整型陣列arr和乙個大於1的整數k,已知arr中只有乙個數出現了一次,其他的數都出現了k次,請返回只出現1次的數。要求時間複雜度o n 空間複雜度o 1 基本思路 首先看乙個七進製數無進製相加的問題。七進製數a 6 4 3 2 6 0 1 七進製數b 3 4 5 0 1 1 1 無進製...

在其他數都出現k次的陣列中找到僅出現過一次的數字

廢話不多說,直接上題目 給定乙個陣列,在這個陣列中有呀乙個數隻出現了一次,其他的數出現次數都是k k 1 請返回這個數字。首先,我們考慮一下這個問題。對於乙個k進製的數字。如果有k個k進製的數字相加的話。會是乙個什麼樣的結果!下圖是7個7進製數字無進製相加的結果。這裡我們發現如果k個k進製的數字無進...