分析:考慮一下答案,因為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進製的數字無進...