Table des matières
Exemple
Méthode 1 : Calculer la fréquence de manière itérative
Sortie
Complexité temporelle
Méthode 2 : Utiliser un tableau de comptage
Conclusion
Maison développement back-end C++ Le caractère qui apparaît le plus souvent dans la liste chaînée

Le caractère qui apparaît le plus souvent dans la liste chaînée

Aug 28, 2023 pm 09:01 PM
链表 字符 Nombre d'occurrences

Le caractère qui apparaît le plus souvent dans la liste chaînée

Nous recevons une liste de caractères chaînés, et notre tâche est d'imprimer le caractère qui apparaît le plus fréquemment dans la liste chaînée. Si plusieurs caractères apparaissent le même nombre de fois, la dernière occurrence du caractère est imprimée.

Une liste chaînée unique est une structure de données linéaire composée de nœuds. Chaque nœud contient des données et un pointeur vers le nœud suivant, qui contient l'adresse mémoire du nœud suivant car la mémoire allouée à chaque nœud n'est pas contiguë.

Exemple

Supposons que nous ayons reçu une liste de liens de personnages

Exemple 1

Entrée : LL = a -> b -> c -> c -> c

Sortie : le caractère le plus courant est c.

Explication : Dans la liste chaînée donnée LL, a apparaît une fois, b apparaît une fois et c apparaît 3 fois. Par conséquent, la sortie est c.

Exemple 2

Entrez :

LL = x -> x -> y -> y -> z -> z

Sortie : le plus grand caractère présent est z.

Explication : Dans la liste chaînée donnée LL, x apparaît 2 fois, y apparaît 2 fois et z apparaît 2 fois. Toutes les occurrences sont identiques car z apparaît en dernier, donc la sortie est z.

Ici, nous discuterons de deux méthodes. Jetons un coup d'œil aux parties ci-dessous -

Méthode 1 : Calculer la fréquence de manière itérative

L'idée de cette méthode est que nous allons parcourir la liste chaînée et calculer la fréquence de chaque caractère, puis trouver le caractère avec la fréquence la plus élevée, et si plusieurs caractères ont la même fréquence, imprimer ce caractère et renvoyer le dernier caractère .

Exemple

#include <iostream>
using namespace std;
// creating a class to have a structure for linked list nodes 
class Node{
   public:
   char data; // variable to store the characters
   Node* next = NULL; // variable to store the address of the next node     
   Node(char cur){
      data = cur;
   }
};
// function to print the elements of the linked list 
void printLL(Node* head){   
   // creating a temporary pointer 
   Node* temp = head;    
   while(temp != nullptr){
      cout<<temp->data<<" -> ";
      temp = temp->next;
   }
   cout<<"NULL"<<endl;
}
// function to find the max frequency 
void maxFreq(Node* head){
   // traversing over the linked list for each character 
   // starting from the first character to the last character     
   int ans = 0; // variable to store the maximum frequency 
   char char_ans;
   Node* temp_first = head; // variable to store the current first node     
   while(temp_first != nullptr){
      int cur = 0; // variable to store the frequency of the current character 
      Node* temp = temp_first;        
      while(temp != nullptr){
         if(temp->data == temp_first->data){
            cur++;
         }
         temp = temp->next;
      }
      if(ans < cur){
         ans = cur;
         char_ans = temp_first->data;
      }
      temp_first = temp_first->next;
   }
   cout<<"The last character in the given linked list is '"<<char_ans<<"' with the frequency of "<< ans<<endl;
}
// main function 
int main(){
   // defining the linked list 
   Node* head = new Node('a');
   head->next = new Node('b');
   head->next->next = new Node('b');
   head->next->next->next = new Node('c');
   head->next->next->next->next = new Node('d');
   head->next->next->next->next->next = new Node('d');
   head->next->next->next->next->next->next = new Node('d');  
   cout<<"The given linked list is: "<<endl;
   printLL(head);   
   maxFreq(head);
   return 0;
}
Copier après la connexion

Sortie

The given linked list is: 
a -> b -> b -> c -> d -> d -> d -> NULL
The last character in the given linked list is 'd' with the frequency of 3
Copier après la connexion

Complexité temporelle

 : O(N*N), où N est la taille de la liste chaînée.

Complexité spatiale : O(1)

Méthode 2 : Utiliser un tableau de comptage

L'idée de cette approche est que nous maintiendrons un tableau de décomptes dans lequel nous stockerons la fréquence de chaque caractère, puis parcourrons le tableau et trouverons le caractère de fréquence la plus élevée. Si plusieurs caractères ont la même fréquence, imprimez ce caractère puis renvoyez le dernier caractère.

Exemple

#include <iostream>
using namespace std;
// creating a class to have a structure for linked list nodes 
class Node{
   public:
   char data; // variable to store the characters
   Node* next = NULL; // variable to store the address of the next node     
   Node(char cur){
      data = cur;
   }
};
// function to print the elements of the linked list 
void printLL(Node* head){    
   // creating a temporary pointer 
   Node* temp = head;    
   while(temp != nullptr){
      cout<<temp->data<<" -> ";
      temp = temp->next;
   }
   cout<<"NULL"<<endl;
}
// function to find the max frequency 
void maxFreq(Node* head){
   int ans = 0; // variable to store the maximum frequency 
   char char_ans;    
   // traversing over the linked list for each lowercase character 
   for(char i = 'a'; i<= 'z'; i++){
      Node* temp = head;
      int cur = 0; // variable to store the frequency of the current character 
      while(temp != nullptr){
         if(temp->data == i){
            cur++;
         }
         temp = temp->next;
      }
      if(ans <= cur){
         ans = cur;
         char_ans = i;
      }
   }     
   cout<<"The last character in the given linked list is '"<<char_ans<<"' with the frequency of "<< ans<<endl;
}
int main(){
   // defining the linked list 
   Node* head = new Node('a');
   head->next = new Node('b');
   head->next->next = new Node('b');
   head->next->next->next = new Node('c');
   head->next->next->next->next = new Node('e');
   head->next->next->next->next->next = new Node('d');
   head->next->next->next->next->next->next = new Node('d');  
   cout<<"The given linked list is: "<<endl;
   printLL(head);   
   maxFreq(head);
   return 0;
}
Copier après la connexion

Sortie

The given linked list is: 
a -> b -> b -> c -> e -> d -> d -> NULL
The last character in the given linked list is 'd' with the frequency of 2
Copier après la connexion

Complexité temporelle

O(N), où N est la taille de la liste chaînée.

Complexité spatiale : O(N), où N est la taille de la liste chaînée.

Conclusion

Nous discutons ici de la façon de trouver les caractères les plus fréquents dans une liste chaînée. Pour trouver l’occurrence maximale de caractères, nous avons discuté de deux méthodes. La première méthode utilise une boucle while pour chaque caractère de la liste chaînée donnée et la deuxième méthode utilise une boucle for pour chaque caractère minuscule et maintient le décompte.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Utilisez la fonction Character.isDigit() de Java pour déterminer si un caractère est un nombre Utilisez la fonction Character.isDigit() de Java pour déterminer si un caractère est un nombre Jul 27, 2023 am 09:32 AM

Utilisez la fonction Character.isDigit() de Java pour déterminer si un caractère est un caractère numérique. Les caractères sont représentés sous la forme de codes ASCII en interne dans l'ordinateur. Chaque caractère a un code ASCII correspondant. Parmi eux, les valeurs du code ASCII correspondant aux caractères numériques 0 à 9 sont respectivement 48 à 57. Pour déterminer si un caractère est un nombre, vous pouvez utiliser la méthode isDigit() fournie par la classe Character en Java. La méthode isDigit() est de la classe Character

Comment taper des flèches dans Word Comment taper des flèches dans Word Apr 16, 2023 pm 11:37 PM

Comment utiliser la correction automatique pour saisir des flèches dans Word L'un des moyens les plus rapides de saisir des flèches dans Word consiste à utiliser les raccourcis de correction automatique prédéfinis. Si vous tapez une séquence spécifique de caractères, Word convertit automatiquement ces caractères en symboles fléchés. Vous pouvez dessiner de nombreux styles de flèches différents en utilisant cette méthode. Pour taper une flèche dans Word à l'aide de la correction automatique : Déplacez votre curseur vers l'emplacement du document où vous souhaitez que la flèche apparaisse. Tapez l'une des combinaisons de caractères suivantes : Si vous ne souhaitez pas que ce que vous tapez soit remplacé par un symbole de flèche, appuyez sur la touche Retour arrière de votre clavier pour

Comment saisir des caractères étendus, tels que le symbole du degré, sur iPhone et Mac ? Comment saisir des caractères étendus, tels que le symbole du degré, sur iPhone et Mac ? Apr 22, 2023 pm 02:01 PM

Votre clavier physique ou numérique offre un nombre limité d'options de caractères en surface. Cependant, il existe plusieurs façons d'accéder aux lettres accentuées, aux caractères spéciaux et bien plus encore sur iPhone, iPad et Mac. Le clavier iOS standard vous donne un accès rapide aux lettres majuscules et minuscules, aux chiffres standard, à la ponctuation et aux caractères. Bien sûr, il existe de nombreux autres personnages. Vous pouvez choisir entre des lettres avec des signes diacritiques et des points d'interrogation à l'envers. Vous êtes peut-être tombé sur un caractère spécial caché. Sinon, voici comment y accéder sur iPhone, iPad et Mac. Comment accéder aux caractères étendus sur iPhone et iPad Obtenir des caractères étendus sur votre iPhone ou iPad est très simple. Dans "Informations", "

Comment appliquer les options de formatage en exposant et en indice dans Microsoft Excel Comment appliquer les options de formatage en exposant et en indice dans Microsoft Excel Apr 14, 2023 pm 12:07 PM

Un exposant est un ou plusieurs caractères, lettres ou chiffres, que vous devez définir légèrement au-dessus de la ligne normale de texte. Par exemple, si vous devez écrire 1er, la lettre st doit être légèrement plus haute que le caractère 1. De même, un indice est un groupe de caractères ou un caractère unique et doit être défini légèrement à un niveau inférieur au niveau de texte normal. Par exemple, lorsque vous écrivez une formule chimique, vous devez placer les nombres sous la ligne normale de caractères. Les captures d'écran suivantes montrent quelques exemples de formatage en exposant et en indice. Même si cela peut sembler une tâche ardue, appliquer le formatage en exposant et en indice à votre texte est en réalité assez simple. Dans cet article, nous expliquerons en quelques étapes simples comment formater facilement du texte en exposant ou en indice. J'espère que vous avez apprécié la lecture de cet article. Comment appliquer l'exposant dans Excel

Manière correcte d'afficher les caractères chinois dans matplotlib Manière correcte d'afficher les caractères chinois dans matplotlib Jan 13, 2024 am 11:03 AM

Afficher correctement les caractères chinois dans matplotlib est un problème souvent rencontré par de nombreux utilisateurs chinois. Par défaut, matplotlib utilise des polices anglaises et ne peut pas afficher correctement les caractères chinois. Pour résoudre ce problème, nous devons définir la police chinoise correcte et l'appliquer à matplotlib. Vous trouverez ci-dessous quelques exemples de code spécifiques pour vous aider à afficher correctement les caractères chinois dans matplotlib. Tout d’abord, nous devons importer les bibliothèques requises : importmatplot

Recherchez le nième nœud de la dernière liste chaînée en C++ à l'aide de la méthode récursive Recherchez le nième nœud de la dernière liste chaînée en C++ à l'aide de la méthode récursive Sep 15, 2023 pm 05:53 PM

Étant donné une liste à chaînage unique et un entier positif N en entrée. Le but est de trouver le Nème nœud à partir de la fin de la liste donnée en utilisant la récursivité. Si la liste d'entrée a des nœuds a → b → c → d → e → f et N vaut 4, alors le 4ème nœud du dernier sera c. Nous allons d'abord parcourir jusqu'au dernier nœud de la liste et au retour du nombre d'incréments récursifs (retour en arrière). Lorsque count est égal à N, un pointeur vers le nœud actuel est renvoyé comme résultat. Examinons différents scénarios d'entrée et de sortie pour cela - Entrée - Liste : -1→5→7→12→2→96→33N=3 Sortie − Le Nième nœud du dernier est : 2 Explication − Le troisième nœud est 2 . Entrée - Liste : -12 → 53 → 8 → 19 → 20 → 96 → 33N = 8 Sortie – Le nœud n'existe pas

Comment utiliser Golang pour déterminer si un caractère est une lettre Comment utiliser Golang pour déterminer si un caractère est une lettre Dec 23, 2023 am 11:57 AM

Comment utiliser Golang pour déterminer si un caractère est une lettre. Dans Golang, déterminer si un caractère est une lettre peut être obtenu en utilisant la fonction IsLetter du package Unicode. La fonction IsLetter vérifie si le caractère donné est une lettre. Ensuite, nous présenterons en détail comment utiliser Golang pour écrire du code afin de déterminer si un caractère est une lettre. Tout d’abord, vous devez créer un nouveau fichier Go dans lequel écrire le code. Vous pouvez nommer le fichier « main.go ». code

Concernant la représentation des caractères de la touche Entrée en Java, de laquelle s'agit-il ? Concernant la représentation des caractères de la touche Entrée en Java, de laquelle s'agit-il ? Mar 29, 2024 am 11:48 AM

La représentation alphabétique de la touche Entrée en Java est `. En Java, ` représente un caractère de nouvelle ligne, et lorsque ce caractère est rencontré, la sortie du texte sera renvoyée à la ligne. Voici un exemple de code simple qui montre comment utiliser `` pour représenter la touche Entrée : publicclassMain{publicstaticvoidmain(String[]args){System.out.println("Ceci est la première ligne de ce

See all articles