计算C ++链表中的最小频率元素

给定任务是计算给定链表中具有重复元素的最小频率元素。

链表是一种数据结构,其中数据以串行顺序存储,就像每个元素链接到下一个元素的列表一样。

链表中元素的出现频率是指链表中元素出现的次数。根据问题,我们必须计算链表中的最小频率。

让我们假设我们有一个链接列表,1、1、3、1、3、4、6;最小频率是一个,因此我们必须计算具有最小频率的元素。只有两个元素4和6的频率最低,因此计数为2。

输入-

linked list 1->1->2->2->2->3->3

输出-

count is 2

说明-

在上面的示例中,最小频率为2,并且有两个具有最小频率的元素,即1和3,因此计数为2。

输入-

linked list = 1->2->3->2->4->2->5

输出-

count is 4

说明-

在上面的示例中,最小频率为1,并且有4个具有最小频率的元素,即1、3、4和5,因此计数为4。

在以下程序中使用的方法如下

  • 定义一个链表,然后将元素推入链表。

  • 在最小函数中查找频率最小的元素的计数,声明一个映射“ mymap”以存储数字的频率。

  • 遍历列表,并将元素的频率(出现)存储在mymap中。

  • 找到频率并将频率存储在mymap中之后,然后找到最小频率。

  • 计算mymap中出现的频率次数。

  • 返回计数。

示例

#include <iostream>
#include <unordered_map>
#include <climits>
using namespace std;
struct Node {
   int key;
   struct Node* next;
};
//将值压入堆栈
void push(struct Node** head_ref, int new_key){
   struct Node* new_node = new Node;
   new_node->key = new_key;
   new_node->next = (*head_ref);
   (*head_ref) = new_node;
}
//计算最小频率元素的功能
//在链接列表中
int minimum(struct Node* head){
   //存储所有节点的频率。
   unordered_map<int, int> mymap;
   struct Node* current = head;
   while (current != NULL){
      int value = current->key;
      mymap[value]++;
      current = current->next;
   }
   //查找最小频率
   current = head;
   int min = INT_MAX, count = 0;
   for (auto it = mymap.begin(); it != mymap.end(); it++){
      if (it->second <= min){
         min = it->second;
      }
   }
   //查找最小频率元素的数量
   for (auto it = mymap.begin(); it != mymap.end(); it++){
      if (it->second == min){
         count += (it->second);
      }
   }
   return count;
}
int main(){
   /* Starting with an empty list */
   struct Node* head = NULL;
   int x = 21;
   push(&head, 30);
   push(&head, 50);
   push(&head, 61);
   push(&head, 40);
   push(&head, 30);
   cout <<"count is: "<<minimum(head) << endl;
   return 0;
}

输出结果

如果运行上面的代码,我们将获得以下输出-

count is: 3