首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 一維數組進階實戰:數字統計、編碼轉換與排序算法

     編輯:Java 相關知識

6.3 數組使用示例(三):三大綜合算法案例

6.3.7 數字統計:最高頻數字查找

需求:統計整數中出現最多的數字,次數相同取較大者(如 23231 → 3)

分解三步走

  1. 拆分數字:%10 取個位,/10 去個位,循環至 0
  2. 統計頻次:長度 10 數組,下標對應數字 0-9
  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);

6.3.8 數組編碼:逆序對計數變體

需求:已知排列 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;
}

應用場景:排列排名、康托展開核心步驟。

6.3.9 冒泡排序:經典原地排序

需求:數組升序排列

算法邏輯

  • length-1 輪冒泡
  • 每輪相鄰比較交換,最大值沉底
  • 下輪比較範圍縮減 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 組合
  • 頻次統計:下標即數值的計數陣列
  • 排序優化:內層範圍隨外層遞減

這三個案例涵蓋了數組操作的高頻模式,是算法基礎必練項目。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved