具體思路:
建立乙個字元二維陣列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進製。解題步驟 第一步 建立乙...