计算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

以上是 计算C ++链表中的最小频率元素 的全部内容, 来源链接: utcz.com/z/347264.html

回到顶部