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

2021-09-26 04:57:27 字數 824 閱讀 3613

題目

給定乙個整型陣列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 

無進製相加的結果:  2 1 1 2 0 1 2

可以看出,a和b無進製相加,在i位置上的結果就是 (a[i] + b[i]) % 7。同理,k進製的兩個數相加,i位置上的值為 (a[i] + b[i]) % k。那麼,如果k個相同的k進製數相加,相加的結果一定是每一位上都為0。

知道上述過程,解這道題就很容易了。首先將陣列中每乙個數都轉換成k進製數,如果乙個元素出現了k次,那麼k次相加以後一定為0。所以,設定乙個變數e,初始化為0,將所有元素相加完後,e的值就是只出現一次的數的k進製形式,再將其轉換成10進製數就可以了。

public int oncenum(int arr,int k)

int res = getnumfromksysnum(e,k);

return res;

}public void setexclusiveor(int e,int value,int k)

public int getksysnumfromnum(int value,int k)

return res;

}public int getnumfromksysnum(int e,int k)

return res;

}

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

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

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

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

在其他數都出現偶數次的陣列中找到出現奇數次的數

題目 給定乙個陣列arr,其中只有乙個數出現了奇數次,其他數都出現了偶數次,列印這個數。高階問題 有兩個數出現了奇數次,其他數出現了偶數次,列印這兩個數。要求時間複雜度o n 空間複雜度 1 基本思路 整數n與0異或的結果是n,整數n與整數n異或的結果是0 同時,異或滿 換律和結合律。知道上述的內容...