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

2021-08-14 03:26:01 字數 893 閱讀 5543

廢話不多說,直接上題目:給定乙個陣列,在這個陣列中有呀乙個數隻出現了一次,其他的數出現次數都是k(k>1),請返回這個數字。

首先,我們考慮一下這個問題。對於乙個k進製的數字。如果有k個k進製的數字相加的話。會是乙個什麼樣的結果!下圖是7個7進製數字無進製相加的結果。

這裡我們發現如果k個k進製的數字無進製相加的話結果是0。那麼我們的問題是陣列中的所有數字都出現了k次,僅有乙個數字出現過一次。如果我們把這些數字都轉化成k進製然後無進製相加,最後剩下的就是那個出現一次的數字的k進製結果了對吧!最後我們把這個結果從新把k進製轉化成10進製就好了哈!

那麼現在我們該怎麼做呢?首先,我們需要乙個把乙個數字轉化成k進製的函式。這個不難吧!

/**

將乙個數字轉化為k進製

*/public

int getkfromnumber(int value, int k)

return reslut;

}

然後將陣列中的每乙個數字轉化成k進製做無進製相加。

public

void

setexcutereslut(int reslut, int

value, int k)

}

最後把這個存放在陣列中的k進製數字,轉換成10進製,就找到了這個出現過一次的數字了。

這裡是將k進製數字轉換回來的函式!

public

intgetnumberfromksys(int number, int k)

return res;

}

在其他數都出現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 無進製...

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

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