Table des matières
Méthode 2
Algorithme
Exemple
Sortie
Maison développement back-end C++ Réorganiser et mettre à jour les éléments du tableau en fonction d'une requête donnée

Réorganiser et mettre à jour les éléments du tableau en fonction d'une requête donnée

Sep 14, 2023 pm 04:29 PM
数组 更新 重新排列

Réorganiser et mettre à jour les éléments du tableau en fonction dune requête donnée

Dans cette question, nous exécuterons la requête donnée sur les éléments du tableau. La requête contient une boucle de rotation à gauche, de rotation à droite et de mise à jour des éléments du tableau.

La partie logique de la résolution du problème est la rotation du tableau. Un moyen simple de faire pivoter un tableau vers la gauche consiste à remplacer chaque élément par l’élément suivant et le dernier élément par le premier élément.

Nous pouvons utiliser la structure de données deque pour faire pivoter le tableau efficacement.

Énoncé du problème - On nous donne un tableau arr[] contenant des valeurs entières. De plus, nous recevons un tableau requêtes[] contenant K requêtes. Nous devons exécuter chaque requête donnée dans request[] sur les éléments du tableau arr[] selon les règles suivantes.

  • {0} : effectue une rotation circulaire vers la gauche sur le tableau.

  • {1) - effectue une rotation circulaire à droite du tableau.

  • {2, p, q} - Met à jour l'élément à l'index p avec q.

  • {3, p} - imprime l'élément à l'index p.

Exemple

Entrez

arr[] = {8, 9, 13, 44, 76, 67, 21, 51}; queries = {{1}, {0}, {2, 4, 50}, {3, 2}, {2, 2, 223}, {3, 2}};
Copier après la connexion

Sortie

13,223
Copier après la connexion

Explication- Exécutons chaque requête.

  • {1} -> Après avoir fait pivoter le tableau vers la droite, le tableau devient {51, 8, 9, 13, 44, 76, 67, 21}

  • {0} -> Après avoir fait pivoter le tableau mis à jour vers la gauche, le tableau devient égal à {8, 9, 13, 44, 76, 67, 21, 51}.

    < /里>
  • {2, 4, 50} -> Après avoir mis à jour l'élément à l'index 4 à 50, le tableau devient {8, 9, 13, 44, 50, 67, 21, 51}

    < /里>
  • {3, 2} -> Il imprime l'élément dans le deuxième index.

  • {2, 2, 223}−> Mettez à jour l'élément au deuxième index à 223, et le tableau devient {8, 9, 223, 44, 50, 67, 21, 51}.

  • {3, 2} -> Il imprime l'élément dans le deuxième index.

Entrez

arr[] = {3, 2, 1}, {{3, 2}, {3, 0}}
Copier après la connexion

Sortie

1,3
Copier après la connexion

Description - Il imprime le tableau à partir du 2ème et du 0ème index.

Entrez

arr[] = {76,20,51,78}, queries={{1},{1},{3, 1}}
Copier après la connexion

Sortie

78
Copier après la connexion

Explication- Après avoir fait pivoter le tableau vers la droite 2 fois, le tableau devient [51, 78, 76, 20]. L'élément au premier index est 78.

Méthode 1

Dans cette méthode, nous allons parcourir chaque requête et effectuer des opérations basées sur la requête donnée. Nous remplaçons chaque élément du tableau par l'élément suivant pour le faire pivoter vers la gauche, et chaque élément par l'élément précédent pour le faire pivoter vers la droite.

Algorithme

Étape 1- Commencez à parcourir chaque requête.

Étape 2− Si query[p][0] est égal à 0, veuillez suivre les étapes ci-dessous.

Étape 2.1- Initialisez la variable "temp" en utilisant le premier élément du tableau.

Étape 2.2- Commencez à parcourir le tableau et remplacez chaque élément par l'élément suivant.

Étape 2.3- Remplacez le dernier élément par la valeur "temp".

Étape 3− Si query[p][0] est égal à 1, suivez ces étapes.

Étape 3.1- Stockez le dernier élément du tableau dans la variable "temp".

Étape 3.2- Commencez à parcourir le tableau et remplacez chaque élément par l'élément précédent.

Étape 3.3- Mettez à jour le premier élément avec la valeur "temp".

Étape 4- Si requêtes[p][0] est 2, mettez à jour l'élément du tableau à l'index donné avec la valeur donnée.

Étape 5- Si requêtes[p][0] est 3, imprimez la valeur du tableau à l'index donné.

Exemple

#include <bits/stdc++.h>
using namespace std;

void performQueries(int arr[], int N, vector<vector<int>> &queries) {
    int len = queries.size();
    for (int p = 0; p < len; p++) {
        // For left shift
        if (queries[p][0] == 0) {
            //    left shift array
            int temp = arr[0];
            for (int p = 0; p < N - 1; p++){
                arr[p] = arr[p + 1];
            }
            arr[N - 1] = temp;
        }
        // For the right shift
        else if (queries[p][0] == 1) {
            // Right shift array
            int temp = arr[N - 1];
            for (int p = N - 1; p > 0; p--){
                arr[p] = arr[p - 1];
            }
            arr[0] = temp;
        }
        // For updating the value
        else if (queries[p][0] == 2) {
            arr[queries[p][1]] = queries[p][2];
        }
        // For printing the value
        else {
            cout << arr[queries[p][1]] << " ";
        }
    }
}
int main() {
    int arr[] = {8, 9, 13, 44, 76, 67, 21, 51};
    int N = sizeof(arr) / sizeof(arr[0]);
    vector<vector<int>> queries;
    queries = {{1}, {0}, {2, 4, 50}, {3, 2}, {2, 2, 223}, {3, 2}};
    performQueries(arr, N, queries);
    return 0;
}
Copier après la connexion

Sortie

13 223
Copier après la connexion

Complexité temporelle - O(N*K), parcourez la requête et faites pivoter le tableau.

Complexité spatiale - O(1) car nous utilisons un espace constant.

Méthode 2

Dans cette méthode, nous utiliserons deque pour stocker les éléments du tableau. Ensuite, pour faire pivoter le tableau vers la gauche, nous pouvons retirer l'élément précédent de la file d'attente et le pousser jusqu'à la fin de la file d'attente. De même, nous pouvons faire pivoter le tableau dans la bonne direction.

Algorithme

Étape 1- Définissez le deque et placez tous les éléments du tableau dans la file d'attente.

Étape 2- Utilisez une boucle for pour parcourir chaque requête.

Étape 3- Pour faire pivoter le tableau vers la gauche, supprimez le premier élément du début de la file d'attente et poussez-le jusqu'à la fin de la file d'attente.

Étape 4- Pour faire pivoter le tableau dans le bon sens, supprimez un élément de la fin de la file d'attente et poussez cet élément vers le début.

Étape 5- Mettez à jour l'élément ou imprimez la valeur de l'élément en fonction de la requête donnée.

Exemple

#include <bits/stdc++.h>
using namespace std;

void performQueries(int arr[], int N, vector<vector<int>> &queries) {
    // Queue to insert array elements
    deque<int> que;
    // Add elements to queue
    for (int p = 0; p < N; p++) {
        que.push_back(arr[p]);
    }
    // total queries
    int len = queries.size();
    for (int p = 0; p < len; p++) {
        // For left shift
        if (queries[p][0] == 0) {
            // Get the first element
            int temp = que[0];
            // Remove the first element
            que.pop_front();
            // Push element at the last
            que.push_back(temp);
        }
        // For the right shift
        else if (queries[p][0] == 1) {
            // Get the last element
            int temp = que[N - 1];
            // remove the last element
            que.pop_back();
            // Insert element at the start
            que.push_front(temp);
        }
        // For updating the value
        else if (queries[p][0] == 2) {
            que[queries[p][1]] = queries[p][2];
        }
        // For printing the value
        else {
            cout << que[queries[p][1]] << " ";
        }
    }
}
int main() {
    int arr[] = {8, 9, 13, 44, 76, 67, 21, 51};
    int N = sizeof(arr) / sizeof(arr[0]);
    vector<vector<int>> queries;
    queries = {{1}, {0}, {2, 4, 50}, {3, 2}, {2, 2, 223}, {3, 2}};
    performQueries(arr, N, queries);
    return 0;
}
Copier après la connexion

Sortie

13 223	
Copier après la connexion

Complexité temporelle - O(N+K) pour insérer des éléments du tableau dans la file d'attente.

Space Complexity - O(N) pour stocker des éléments dans un deque.

La structure de données deque nous permet d'effectuer des opérations de rotation gauche et droite en temps O(1). Par conséquent, cela améliore l’efficacité du code qui exécute une requête donnée.

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

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

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)

Windows ne peut pas accéder au périphérique, au chemin ou au fichier spécifié Windows ne peut pas accéder au périphérique, au chemin ou au fichier spécifié Jun 18, 2024 pm 04:49 PM

L'ordinateur d'un ami présente un tel défaut. Lors de l'ouverture de "Ce PC" et du fichier du lecteur C, il affichera "Explorer.EXE Windows ne peut pas accéder au périphérique, au chemin ou au fichier spécifié. Vous ne disposez peut-être pas des autorisations appropriées pour accéder au projet. " Y compris les dossiers, fichiers, cet ordinateur, la corbeille, etc., un double-clic fera apparaître une telle fenêtre, et un clic droit pour l'ouvrir est normal. Ceci est dû à une mise à jour du système. Si vous rencontrez également cette situation, l'éditeur ci-dessous vous apprendra comment la résoudre. 1. Ouvrez l'éditeur de registre Win+R et entrez regedit, ou cliquez avec le bouton droit sur le menu Démarrer pour exécuter et entrez regedit. 2. Localisez le registre « Computer\HKEY_CLASSES_ROOT\PackagedCom\ClassInd » ;

Comment supprimer les éléments en double du tableau PHP à l'aide de la boucle foreach ? Comment supprimer les éléments en double du tableau PHP à l'aide de la boucle foreach ? Apr 27, 2024 am 11:33 AM

La méthode d'utilisation d'une boucle foreach pour supprimer les éléments en double d'un tableau PHP est la suivante : parcourez le tableau, et si l'élément existe déjà et que la position actuelle n'est pas la première occurrence, supprimez-le. Par exemple, s'il existe des enregistrements en double dans les résultats de la requête de base de données, vous pouvez utiliser cette méthode pour les supprimer et obtenir des résultats sans enregistrements en double.

Windows suspend définitivement les mises à jour, Windows désactive les mises à jour automatiques Windows suspend définitivement les mises à jour, Windows désactive les mises à jour automatiques Jun 18, 2024 pm 07:04 PM

Les mises à jour Windows peuvent provoquer certains des problèmes suivants : 1. Problèmes de compatibilité : certaines applications, pilotes ou périphériques matériels peuvent être incompatibles avec les nouvelles mises à jour Windows, ce qui entraîne un dysfonctionnement ou un blocage. 2. Problèmes de performances : Parfois, les mises à jour de Windows peuvent ralentir le système ou subir une dégradation des performances. Cela peut être dû à de nouvelles fonctionnalités ou à des améliorations nécessitant davantage de ressources pour fonctionner. 3. Problèmes de stabilité du système : certains utilisateurs ont signalé qu'après l'installation des mises à jour Windows, le système pouvait rencontrer des pannes inattendues ou des erreurs d'écran bleu. 4. Perte de données : Dans de rares cas, les mises à jour Windows peuvent entraîner une perte de données ou une corruption de fichiers. C'est pourquoi avant d'effectuer des mises à jour importantes, sauvegardez votre

L'art de PHP Array Deep Copy : utiliser différentes méthodes pour obtenir une copie parfaite L'art de PHP Array Deep Copy : utiliser différentes méthodes pour obtenir une copie parfaite May 01, 2024 pm 12:30 PM

Les méthodes de copie approfondie de tableaux en PHP incluent : l'encodage et le décodage JSON à l'aide de json_decode et json_encode. Utilisez array_map et clone pour créer des copies complètes des clés et des valeurs. Utilisez Serialize et Unsérialize pour la sérialisation et la désérialisation.

Inversion des valeurs clés du tableau PHP : analyse comparative des performances de différentes méthodes Inversion des valeurs clés du tableau PHP : analyse comparative des performances de différentes méthodes May 03, 2024 pm 09:03 PM

La comparaison des performances des méthodes de retournement des valeurs de clé de tableau PHP montre que la fonction array_flip() fonctionne mieux que la boucle for dans les grands tableaux (plus d'un million d'éléments) et prend moins de temps. La méthode de la boucle for consistant à retourner manuellement les valeurs clés prend un temps relativement long.

AMD publie une nouvelle mise à jour du micrologiciel AGESA pour corriger la vulnérabilité Zenbleed affectant les processeurs Zen 2 AMD publie une nouvelle mise à jour du micrologiciel AGESA pour corriger la vulnérabilité Zenbleed affectant les processeurs Zen 2 May 03, 2024 pm 04:31 PM

Selon les informations de ce site du 3 mai, MSI a publié aujourd'hui la mise à jour du micrologiciel AMDAM4AGESA1.2.0.Ca, qui corrige la vulnérabilité de sécurité Zenbleed dans l'APU Zen2 AMD Ryzen4000. La mise à jour du firmware publiée par MSI convient cette fois à presque toutes les cartes mères X570. Elle corrige principalement le CVE-2023-20593 pour les processeurs Zen2, qu'AMD classe comme menace moyenne. Remarque sur ce site : Le numéro de suivi des vulnérabilités est CVE-2023-20593, qui peut voler des données confidentielles à une vitesse de 30 Ko par cœur et par seconde. Cette attaque affecte tous les logiciels exécutés sur le processeur, y compris les machines virtuelles, les bacs à sable, les conteneurs et les processus. Bien que le but d’AGESA1.2.0.Ca

Meilleures pratiques pour la copie approfondie des tableaux PHP : découvrez des méthodes efficaces Meilleures pratiques pour la copie approfondie des tableaux PHP : découvrez des méthodes efficaces Apr 30, 2024 pm 03:42 PM

La meilleure pratique pour effectuer une copie complète d'un tableau en PHP consiste à utiliser json_decode(json_encode($arr)) pour convertir le tableau en chaîne JSON, puis à le reconvertir en tableau. Utilisez unserialize(serialize($arr)) pour sérialiser le tableau en chaîne, puis désérialisez-le en un nouveau tableau. Utilisez RecursiveIteratorIterator pour parcourir de manière récursive des tableaux multidimensionnels.

Application de la fonction de regroupement de tableaux PHP dans le tri des données Application de la fonction de regroupement de tableaux PHP dans le tri des données May 04, 2024 pm 01:03 PM

La fonction array_group_by de PHP peut regrouper des éléments dans un tableau en fonction de clés ou de fonctions de fermeture, renvoyant un tableau associatif où la clé est le nom du groupe et la valeur est un tableau d'éléments appartenant au groupe.

See all articles