出現k次與出現1次《演算法很美》

2021-10-11 17:34:18 字數 1232 閱讀 7891

具體思路:

建立乙個字元二維陣列char kradix = new char[len];將arr的每乙個數轉換成三進製integer.tostring(arr[i],k),並進行翻轉-變為字串-最後整成字元陣列

同時要將最長的三進製數長度儲存if (kradix[i].length > maxlen) maxlen = kradix[i].length;開闢乙個新陣列存放進製的不進製每一位的和int resarr = new int[maxlen];把全部數的三進製的每一位做不進製和放入陣列resarr[maxlen]中

最後再用for遍歷resarr[maxlen]%k * (int) (math.pow(k, i),其實就是%k之後,如果3個相同的基本為0,只有相同數不為三的%k不為0,那麼得出的就是只出現一次的數。

例子:

10進製:

2 、 9 、 7 、 3 、 6 、 0

3進製:

2 、 100 、 21 、 10 、0

反轉(如果不進行反轉就不能正確的位數進行相加)

2 、 001 、 12 、 01 、 0

位數相加(有3個相同的,要3個相加)

991每位%

3並*對應位數k次方(1*

3^2)

得9

public

class 出現k次與出現1次

;int len = arr.length;

char

kradix =

newchar

[len]

;int k =3;

int maxlen =0;

//轉成k進製字元陣列

//對於每個數字

for(

int i =

0; i < len; i++

)//不進製加法

int[

] resarr =

newint

[maxlen]

;for

(int i =

0; i < len; i++)}

int res =0;

for(

int i =

0; i < maxlen; i++

) system.out.

println

(res);}

}

出現k次與出現1次

問題描述 陣列中只有乙個數出現了1次,其他的數都出現了k次,請輸出只出現1次的數。解題思路 陣列a中,除了某乙個數字x之外,其他數字都出現了三次,而x出現了一次。請給出最快的方法找到x。應該如何思考呢?如果是兩個相同的就可以利用兩個相同的數異或結果為0來計算的,但這個題目中其他數字是出現了3次,因此...

演算法習題 出現k次與出現一次

題目 陣列中有的數隻出現1次,其餘數出現k次,輸出只出現1次的數x 解題思路 1.利用技巧性結論 k個k進製的數進行不進製加法,每一位的和均為0。先把十進位制的數轉為k進製。2.轉化為k進製後要按位 列 進行計算,所以要用二維陣列的形式儲存。轉化為k進製後由於數的大小不同,長度也有可能不同,雖然對於...

題7 出現K次與出現1次

題目描述 乙個陣列中只有乙個數出現了1次,其他的數都出現了k次,請輸出出現了1次的那個數。原理 k個相同的k進製數之間做不進製的加法,結果為0,如,2個2得0 10個5得0 解題思路 將所有的數轉化成為k進製,然後做k進製的不進製加法運算,得出的結果再有k進製轉換位10進製。解題步驟 第一步 建立乙...