给定每个元素的查找频率矩阵
给定一个包含英文字母字符的大小为N*N的矩阵arr[] ,任务是找到所有矩阵元素的频率。
注意:按频率降序打印。
例子:
Input: N = 2, arr[] = {{‘a’, ‘b’}, {‘a’, ‘c’}}
Output: a : 2, b : 1, c : 1
Explanation: The frequency of a is 2.
The frequency of ‘b’ is 1 and the Frequency of ‘c’ is 1.
Input: N = 3, arr[] = {{‘a’, ‘a’, ‘a’}, {‘b’, ‘a’, ‘c’}, {‘d’, ‘c’, ‘a’}}
Output: a : 5, c : 2 b : 1, d : 1
方法:解决问题的想法是找到每个字符字符频率一起存储。然后根据频率按降序对字符进行排序。
按照下面提到的步骤来实施该方法。
- 声明一个映射来存储矩阵中每个元素的频率。
- 遍历地图并将每个元素及其频率存储在一个数组中(比如arr2 )。
- 对数组进行排序 基于频率的非递增顺序。
- 遍历arr2[]并打印元素。
下面是上述方法的实现。
C++
// C++ code to implement the approach
#include
using namespace std;
// Function to find the most frequent element
vector > findMostFrequent(
vector >& arr, int n)
{
// Map to store the frequency
// of each character
unordered_map unmap;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
unmap[arr[i][j]]++;
}
}
// To store the frequency of character
vector > arr2;
for (auto i : unmap) {
arr2.push_back({ i.second, i.first });
}
// Sort the array
sort(arr2.rbegin(), arr2.rend());
return arr2;
}
// Driver code
int main()
{
// Size of the matrix
int N = 3;
// Intialize the 2D vector
vector > arr = { { 'a', 'a', 'a' },
{ 'b', 'a', 'c' },
{ 'd', 'c', 'a' } };
// Function call
vector > ans
= findMostFrequent(arr, N);
// Print the answer
for (int i = 0; i < ans.size(); i++) {
cout << ans[i].second << " : "
<< ans[i].first << endl;
}
return 0;
}
输出
a : 5
c : 2
d : 1
b : 1
时间复杂度: O(N 2 )
辅助空间: O(N 2 )