📌  相关文章
📜  给定每个元素的查找频率矩阵

📅  最后修改于: 2022-05-13 01:56:06.563000             🧑  作者: Mango

给定每个元素的查找频率矩阵

给定一个包含英文字母字符的大小为N*N的矩阵arr[] ,任务是找到所有矩阵元素的频率。

注意:按频率降序打印。

例子:

方法:解决问题的想法是找到每个字符字符频率一起存储。然后根据频率按降序对字符进行排序。

按照下面提到的步骤来实施该方法。

  • 声明一个映射来存储矩阵中每个元素的频率。
  • 遍历地图并将每个元素及其频率存储在一个数组中(比如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 )