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

C語言找出已排序陣列中出現次數最多的元素頻率

     編輯:關於C

給定一個已由小到大排序的整數陣列,如何高效找出重複出現次數最多的元素其出現幾次?本文提供一個直觀的解法:先去重取得不重複值陣列,再對每個唯一值計數,最後取最大計數。

問題定義

輸入陣列 re_num[] = {1, 2, 2, 3, 3, 3, 4, 5, 5, 6}(已排序)。輸出最大重複次數(本例為 3,對應元素 3)。

解題策略

  1. 建立 num[] 存放去重後的唯一值(利用已排序特性,相鄰比較即可去重)。
  2. 對每個唯一值,掃描原陣列計算出現次數。
  3. 維護變數 max 記錄最大計數。

程式碼實作

#include <stdio.h>

int main() {
    int i, k, max = 0, j = 0, cout = 0;
    int re_num[] = {1, 2, 2, 3, 3, 3, 4, 5, 5, 6};
    int num[10];

    // 去重:將不重複值存入 num[]
    num[0] = re_num[0];
    for (i = 0; i < 10; i++) {
        if (num[j] != re_num[i]) num[++j] = re_num[i];
    }

    // 計算每個唯一值的出現次數並更新最大值
    for (i = 0; i < j; i++) {
        cout = 0;
        for (k = 0; k < 10; k++) {
            if (num[i] == re_num[k]) cout++;
            if (max < cout) max = cout;
        }
    }

    printf("該陣列中重複次數最多為 %d 次\n", max);
    return 0;
}

執行結果

輸出:該陣列中重複次數最多為 3 次

優化提示

因陣列已排序,實際上只需單次遍歷即可計算連續相同元素的長度,時間複雜度可從 O(n²) 降為 O(n)。

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