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