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