出現k次與出現1次《演算法很美》
題7:出現k次與出現1次
- 陣列中只有一個數出現了1次,其他的數都出現了k次,請輸出只出現了1次的數。
具體思路:
- 建立一個字元二維陣列
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次 {
public static void main(String[] args){
int[] arr = {2,2,2,9,7,7,7,3,3,3,6,6,6,0,0,0};
int len = arr.length;
char[][] kRadix = new char[len][];
int k = 3;
int maxlen = 0;
//轉成k進位制字元陣列
//對於每個數字
for (int i = 0; i < len; i++){
//求每一個數字的三進位制字串並翻轉,然後轉為字元陣列
kRadix[i] = new StringBuilder(Integer.toString(arr[i],k)).reverse().toString().toCharArray();
if (kRadix[i].length > maxlen)
maxlen = kRadix[i].length;
}
//不進位加法
int[] resArr = new int[maxlen];
for(int i = 0; i < len; i++){
// 不進位加法
for(int j = 0; j < maxlen; j++){
if(j >= kRadix[i].length)
resArr[j] += 0;
else
resArr[j] += (kRadix[i][j] - '0');
}
}
int res = 0;
for (int i = 0; i < maxlen; i++){
res += (resArr[i] % k) * (int) (Math.pow(k, i));
}
System.out.println(res);
}
}
相關文章
- 在其它數都出現k次的陣列中找到只出現一次的數陣列
- 【譯】Swift演算法俱樂部-統計出現次數Swift演算法
- 找出陣列中第 k 大的數字及其出現次數陣列
- 小頂堆與topK的具體程式碼實現《演算法很美》TopK演算法
- 統計資料出現次數
- JavaScript統計字元出現的次數JavaScript字元
- 統計字串出現的次數(C)字串
- Dictionary計算字元出現的次數字元
- Python統計列表元素出現次數Python
- JavaScript統計字串中字元出現次數JavaScript字串字元
- 只出現一次的數字 II
- 第一次只出現一次的字元字元
- 聚類演算法與K-means實現聚類演算法
- 統計陣列中各元素出現次數陣列
- 第一個值出現一次的字元字元
- matlab——統計相同元素出現的次數Matlab
- 136. 只出現一次的數字
- 給定一個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。陣列
- [演算法]求母音字母在單詞中第一次出現的位置.演算法
- 2351. 第一次出現兩次的字母
- 逆序對《演算法很美》演算法
- LeetCode 只出現一次的數字LeetCode
- 第一個只出現一次的字元——Java字元Java
- ffmpeg使用tee實現單次編碼多路輸出
- 如何計算字串某個字元出現的次數字串字元
- 如何獲取字串中相同字元出現的次數字串字元
- 統計字串中某個字元出現的次數字串字元
- K-近鄰演算法介紹與程式碼實現演算法
- 第五章 字串專題 ---------------- 5.9 題解:去掉字串中連線出現的k次的0字串
- 記一次透過K8S ingress訪問業務服務出現404問題K8S
- K—means演算法實現流程演算法
- Oracle資料庫——資料匯出時出現匯出成功終止, 但出現警告。Oracle資料庫
- LeetCode 只出現一次的數字IILeetCode
- LeetCode 只出現一次的數字IIILeetCode
- leetcode136. 只出現一次數字LeetCode
- 找出陣列中只出現一次的數字陣列
- 利用HashMap統計字串各個字元出現的次數HashMap字串字元
- 陣列中每個陣列元素出現的次數陣列