出現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次與出現1次
- 在其它數都出現k次的陣列中找到只出現一次的數陣列
- 找出陣列中第 k 大的數字及其出現次數陣列
- 【譯】Swift演算法俱樂部-統計出現次數Swift演算法
- 小頂堆與topK的具體程式碼實現《演算法很美》TopK演算法
- JavaScript統計字元出現的次數JavaScript字元
- Dictionary計算字元出現的次數字元
- 獨一無二的出現次數
- 統計字串出現的次數(C)字串
- 聚類演算法與K-means實現聚類演算法
- LeetCode 只出現一次的數字LeetCode
- 136只出現一次的數字
- matlab——統計相同元素出現的次數Matlab
- 只出現一次的數字 II
- 第一次只出現一次的字元字元
- 2351. 第一次出現兩次的字母
- 給定一個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。陣列
- leetcode136. 只出現一次數字LeetCode
- LeetCode 只出現一次的數字IIILeetCode
- LeetCode 只出現一次的數字IILeetCode
- LC-出現一次的數字II
- 1207. 獨一無二的出現次數
- 136. 只出現一次的數字
- 只出現一次的數字--力扣力扣
- Filecoin首次出現與未來目標
- LeetCode之只出現一次的數字-SwiftLeetCodeSwift
- 第一個只出現一次的字元——Java字元Java
- 找出文字中每個字母出現的次數
- [LeetCode]1207. 獨一無二的出現次數LeetCode
- LeetCode136 只出現一次的數字LeetCode
- 逆序對《演算法很美》演算法
- K-近鄰演算法介紹與程式碼實現演算法
- 第五章 字串專題 ---------------- 5.9 題解:去掉字串中連線出現的k次的0字串
- 記一次透過K8S ingress訪問業務服務出現404問題K8S
- 出現“YoumustresetyourpasswordusingALTERUSERstatementbeforeexecutingthisstatement.”
- Matlab tabulate統計數字出現的次數,如果陣列中出現0Matlab陣列
- Oracle資料庫——資料匯出時出現匯出成功終止, 但出現警告。Oracle資料庫
- matlab如何統計矩陣各元素的出現次數Matlab矩陣