竞赛编程中的频率测量技术
在本文中,我们将探讨查找数组[]中数字频率的不同方法。这些方法在解决不同情况下的各种竞赛编程问题时非常有用。有时,计算数组中出现的数字或字母的元素频率是一项复杂的任务。可以使用各种算法,如搜索、数组和分治法,来查找数组中定义的重复元素。
注意 - 使用整数数组。
让我们探索这篇文章,了解如何使用Java编程语言来解决这个问题。
举几个例子
示例-1
如果:
Number of Elements in Arr[] = N = 4 Arr[] = [5, 7, 6, 7]
那么:
Number Frequency 5 1 7 2 6 1
arr | 索引 | 0 | 1 | 2 | 3 |
值 | 5 | 7 | 6 | 7 |
data | 索引 | 0 | 1 | 2 | 3 |
值 |
freq | 索引 | 0 | 1 | 2 | 3 |
值 |
大小 | 0 |
i = 0 | found = FALSE
|
||||||||||||||||||||||||||||||||||||||||||||
i = 1 | found = FALSE
|
||||||||||||||||||||||||||||||||||||||||||||
i = 2 | found = FALSE
|
||||||||||||||||||||||||||||||||||||||||||||
i = 3 | found = FALSE
|
||||||||||||||||||||||||||||||||||||||||||||
i = 4 | i < N $\mathrm{\Rightarrow}$ 4 < 4 $\mathrm{\Rightarrow}$ FALSE $\mathrm{\Rightarrow}$ 循环中断 |
示例-2
如果:
Number of Elements in Arr[] = N = 8 Arr[] = [6, 7, 8, 9, 5, 4, 3, 5]
那么:
Number Frequency 3 1 4 1 5 2 6 1 7 1 8 1 9 1
语法
为了存储元素的频率,可以使用内置的Map接口。
下面是它的语法:
map<int, int> freqCounter;
这里,频率计数器用于存储频率,第一个元素是“键”,第二个元素是“值”,对应于“键”。
多种方法
我们提供了多种方法的解决方案。
通过两个名为data[] 和 freq[] 的数组,通过它们的索引进行映射。
通过使用“map”来存储数据和频率。
方法-1:使用两个数组data[] 和 freq[],通过它们的索引进行映射
在这个算法中,使用了两个不同的数组data[] 和 freq[]。data[] 用于存储唯一元素,freq[] 用于存储频率。在这种情况下,data[] 和 freq[] 数组通过索引进行映射。
算法 1
步骤-1:向用户询问N(数组中存在的元素数量)。
步骤-2:向用户询问arr[] 的N个元素。
步骤-3:创建两个名为data[N] 和 freq[N] 的整数数组。
步骤-4:创建整数变量“size”。
步骤-5:外循环 (i=0 到 N-1)
步骤-6:设置 found = FALSE
步骤-7:内循环 (j=0 到 size-1)
步骤-8:如果 arr[i] == data[j],则
步骤-9:将freq[j] 加1
步骤-10:设置 found = TRUE
步骤-11:中断内循环
步骤-12:如果 found == FALSE,则
步骤-13:设置 data[size] = arr[i]
步骤-14:设置 freq[size] = 1
步骤-15:将size 加1
步骤-16:显示data[] 数组和 freq[] 数组。
步骤-17:退出
示例
#include <iostream> using namespace std; /** * find and print the frequency * * @param arr: array is an integer array * @param N: Number of elements present in arr[] */ void displayFreq(int arr[], int N) { // create 2 arrays // one for storing data // second for storing frequency int data[N], freq[N], size = 0; // traverse the array for (int i=0; i<N; ++i) { bool found = false; // check for arr[i] in data[] array for (int j=0; j<size; ++j) { if (arr[i] == data[j]) { freq[j] += 1; found = true; break; } } // if arr[i] not found in data[] array if (found == false) { data[size] = arr[i]; freq[size] = 1; size += 1; } } // display the result cout << "Number\tFrequency\n"; for (int i=0; i<size; ++i) { cout << data[i]<< "\t" << freq[i] << endl; } } int main() { // declare N, and arr[] int N, arr[10000]; cout << "Enter the required number: "; cin >> N; // Input elements in the array cout << "Enter " << N << " Numbers separated by SPACE: "; for (int i=0; i<N; ++i) { cin >> arr[i]; } // call the function displayFreq(arr, N); return 0; }
输出
Enter the required number: 7 Enter 7 Numbers separated by SPACE: 9 5 4 9 7 5 3 Number Frequency 9 2 5 2 4 1 7 1 3 1
方法-2:使用“map”存储数据和频率。
此算法使用“map”数据类型以键值对的形式存储数据和频率。
算法
步骤-1:向用户询问N(数组中存在的元素数量)。
步骤-2:向用户询问arr[] 的N个元素。
步骤-3:创建一个Map来存储频率
步骤-4:对于arr[] 的每个元素,增加已创建Map中的频率计数器
步骤-5:在控制台中显示元素及其频率。
步骤-6:退出
示例
#include <iostream> #include <map> using namespace std; /** * find and print the frequency * * @param arr: array is an integer array * @param N: Number of elements present in arr[] */ void displayFrequency(int arr[], int N) { // create map with the name freqCounter map<int, int> freqCounter; // traverse each element of array for (int i=0; i<N; ++i) { // check for arr[i] in map "freqCounter" if (freqCounter.find(arr[i]) == freqCounter.end()) { freqCounter.insert({arr[i], 1}); } else { freqCounter[arr[i]] += 1; } } // display the result cout << "Number\tFrequency\n"; std::map<int, int>::iterator ptr = freqCounter.begin(); while (ptr != freqCounter.end()) { cout << ptr->first << "\t" << ptr->second << "\n"; ++ptr; } } int main() { // declare N, and arr[] int N, arr[10000]; cout << "Enter the required number: "; cin >> N; // Input elements in the array cout << "Enter " << N << " Numbers separated by SPACE: "; for (int i=0; i<N; ++i) { cin >> arr[i]; } // call the function displayFrequency(arr, N); return 0; }
输出
Enter the required number: 10 Enter 10 Numbers separated by SPACE: 5 6 7 9 8 5 4 3 6 5 Number Frequency 3 1 4 1 5 3 6 2 7 1 8 1 9 1
这个问题通过三种不同的方法来解决,这取决于任务的需求。本文阐述了计算数组中出现的元素频率的方法。