在 C++ 中統計排序陣列中元素的出現次數(或頻率)


給定一個排序的整數型元素陣列和一個數字,例如 num,任務是計算給定元素 num 在陣列中出現的次數。

輸入 − int arr[] = {1, 1, 1,2, 3, 4}, num = 1

輸出 − 排序陣列中數字出現的次數為 − 3

輸入 − int arr[] = {2, 3, 4, 5, 5, 6, -7}, num = 5

輸出 − 排序陣列中數字出現的次數為 − 2

輸入 − int arr[] = {-1, 0, 1, 2, 3}, num = 7

輸出 − 排序陣列中數字出現的次數為 − 0

下面程式中使用的演算法如下

有多種方法可以解決上述問題。

樸素演算法

  • 宣告一個包含正數和負數的整數元素陣列和一個整數變數 num,我們需要找到它在陣列中的頻率。

  • 計算陣列的大小並將所有資料傳遞給函式以進行進一步處理。

  • 宣告一個臨時變數 count 來儲存變數 num 出現的次數

  • 從 i = 0 開始迴圈到陣列大小

  • 在迴圈內,如果 num = arr[i],則將 count 的值加 1

  • 返回 count

  • 列印結果。

高效演算法

  • 宣告一個包含正數和負數的整數元素陣列和一個整數變數 num,我們需要找到它在陣列中的頻率。

  • 計算陣列的大小並將所有資料傳遞給函式以進行進一步處理。

  • 宣告一個臨時變數 count 來儲存變數 num 出現的次數

  • 將第一個指標設定為 lower_bound(arr, arr+size, num)

  • 如果 first = (arr + size) || (*first != num),則返回 0

  • 將 end 指標設定為 upper_bound(first, arr+size, num)

  • 將 count 設定為 last - first

  • 返回 count

  • 列印結果

示例(樸素演算法)

 線上演示

#include <iostream>
using namespace std;
int frequency_count(int arr[], int num, int size){
   int count = 0;
   for(int i=0; i<size; i++){
      if(num==arr[i]){
         count++;
      }
   }
   return count;
}
int main(){
   int arr[] = {1, 1, 1,2, 3, 4};
   int num = 1;
   int size = sizeof(arr)/sizeof(arr[0]);
   cout<<"Count of number of occurrences (or frequency) in a sorted array are: "<<frequency_count(arr, num, size);
   return 0;
}

輸出

如果我們執行上面的程式碼,它將生成以下輸出:

Count of number of occurrences (or frequency) in a sorted array are: 3

示例(高效演算法)

 線上演示

# include <bits/stdc++.h>
using namespace std;
int frequency_count(int arr[], int num, int size){
   int *first = lower_bound(arr, arr+size, num);
   if (first == (arr + size) || *first != num){
      cout<<"The Element is not present in an array ";
      return 0;
   }
   int count = 0;
   int *last = upper_bound(first, arr+size, num);
   count = last - first;
   return count;
}
int main(){
   int arr[] = {1, 1, 1, 2, 3, 4};
   int num = 1;
   int size = sizeof(arr)/sizeof(arr[0]);
   cout<<"Count of number of occurrences (or frequency) in a sorted array are: "<<frequency_count(arr, num, size);
   return 0;
}

輸出

如果我們執行上面的程式碼,它將生成以下輸出:

Count of number of occurrences (or frequency) in a sorted array are: 3

更新於:2020年8月31日

2K+ 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.