在 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+ 次浏览

启动您的职业生涯

完成课程获得认证

开始
广告