需求:統計整數中出現最多的數字,次數相同取較大者(如 23231 → 3)
<= 比較確保相同頻次取後者(較大數字)int m = 1232312;
int[] digits = new int[10];
int count = 0;
while (m != 0) {
digits[count++] = m % 10;
m /= 10;
}
int[] freq = new int[10];
for (int i = 0; i < count; i++) freq[digits[i]]++;
int maxIdx = 0;
for (int i = 0; i < freq.length; i++)
if (freq[maxIdx] <= freq[i]) maxIdx = i;
System.out.println(maxIdx);
需求:已知排列 A(0~4),求編碼 B:B[i] = A[i] 前比 A[i] 小的元素個數
A = {0,3,2,1,4} → B = {0,1,1,1,4}
int[] A = {0,3,2,1,4};
int[] B = new int[A.length];
for (int i = 1; i < A.length; i++) {
int cnt = 0;
for (int j = i-1; j >= 0; j--)
if (A[j] < A[i]) cnt++;
B[i] = cnt;
}
應用場景:排列排名、康托展開核心步驟。
需求:數組升序排列
length-1 輪冒泡int[] m = {2,10,3,4,2};
for (int i = 0; i < m.length - 1; i++) {
for (int j = 0; j < m.length - 1 - i; j++) {
if (m[j] > m[j+1]) {
int t = m[j]; m[j] = m[j+1]; m[j+1] = t;
}
}
}
for (int v : m) System.out.println(v);
%10//10 組合這三個案例涵蓋了數組操作的高頻模式,是算法基礎必練項目。