Défi LeetCode : Fusionner un tableau trié - Solution JavaScript
Meilleure interview 150
La fusion de tableaux triés est un problème classique, et comprendre comment le résoudre efficacement est essentiel pour coder les entretiens. Dans cet article, nous aborderons le 88. Merge Sorted Array de LeetCode, qui fait partie du défi Top Interview 150 Questions, en utilisant JavaScript. Plongeons dans le problème, ses nuances et une solution propre et optimale !
? Description du problème
Vous recevez deux tableaux d'entiers nums1 et nums2, triés par ordre non décroissant. Votre tâche consiste à fusionner nums2 en nums1, de telle sorte que nums1 reste trié.
Cependant, il y a une différence :
nums1 a suffisamment d'espace (défini sur 0) pour accueillir les éléments de nums2.
Le résultat final fusionné doit être stocké sur place dans nums1.
? Exemples
Exemple 1
Input: nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3 Output: [1,2,2,3,5,6]
Exemple 2
Input: nums1 = [1], m = 1, nums2 = [], n = 0 Output: [1]
Exemple 3
Input: nums1 = [0], m = 0, nums2 = [1], n = 1 Output: [1]
? Informations clés
- Fusion sur place : vous devez remplir nums1 sans utiliser d'espace supplémentaire. Cela signifie modifier directement le tableau.
- Stratégie vers l'arrière : étant donné que nums1 a un espace supplémentaire à la fin, l'approche la plus efficace consiste à le remplir par l'arrière.
? Solution JavaScript : approche en deux points
La solution optimale exploite une approche à deux points, en commençant par la fin des deux tableaux. Cela garantit que les éléments les plus grands sont placés en premier, évitant ainsi les déplacements inutiles des éléments.
var merge = function(nums1, m, nums2, n) { // Initialize pointers for nums1, nums2, and the last index of nums1 let p1 = m - 1; let p2 = n - 1; let p = m + n - 1; // Compare elements from the end and place the largest at the back while (p1 >= 0 && p2 >= 0) { if (nums1[p1] > nums2[p2]) { nums1[p] = nums1[p1]; p1--; } else { nums1[p] = nums2[p2]; p2--; } p--; } // Copy remaining elements from nums2 (if any) while (p2 >= 0) { nums1[p] = nums2[p2]; p2--; p--; } };
? Comment ça marche
Commencer par la fin :
Comparez les plus grands éléments de nums1 et nums2 (en utilisant p1
et pointeurs p2). Placez le plus grand élément à la fin de
nums1 (en utilisant le pointeur p).Pointeurs de décrémentation :
Déplacez p1, p2 et p pendant que vous traitez les éléments.Gérer les éléments restants :
S'il reste des éléments dans nums2, copiez-les dans nums1. (Non
devez copier les éléments de nums1, car ils sont déjà en place.)
? Analyse de complexité
? Essai à sec
Entrée :
nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
Étape p1 p2 p nums1
Init 2 2 5 [1,2,3,0,0,0]
1 2 2 5 [1,2,3,0,0,6]
2 2 1 4 [1,2,3,0,5,6]
3 2 0 3 [1,2,3,3,5,6]
4 1 0 2 [1,2,2,3,5,6]
5 0 0 1 [1,2,2,3,5,6]
Résultat final : [1,2,2,3,5,6]
? Essayez-le vous-même !
Découvrez le problème complet et les cas de test sur LeetCode. Mettez-vous au défi de mettre en œuvre la solution sans regarder le code !
✨ Conseils de pro pour les entretiens
- Clarifiez les contraintes : demandez si vous pouvez utiliser de l'espace supplémentaire ou si la place est obligatoire.
- Optimiser pour les cas extrêmes : considérez les cas où nums2 est vide ou nums1 n'a pas d'éléments initiaux (m = 0).
- Parcourez votre logique : expliquez l'approche à deux points clairement à l'intervieweur.
Vous avez des questions ou des idées ? Partagez-les dans les commentaires ci-dessous ! Apprenons ensemble. ?
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!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

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

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

Clothoff.io
Dissolvant de vêtements AI

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 !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Il existe trois façons courantes d'initier des demandes HTTP dans Node.js: utilisez des modules intégrés, Axios et Node-Fetch. 1. Utilisez le module HTTP / HTTPS intégré sans dépendances, ce qui convient aux scénarios de base, mais nécessite un traitement manuel de la couture des données et de la surveillance des erreurs, tels que l'utilisation de https.get () pour obtenir des données ou envoyer des demandes de post via .write (); 2.AXIOS est une bibliothèque tierce basée sur la promesse. Il a une syntaxe concise et des fonctions puissantes, prend en charge l'async / attendre, la conversion JSON automatique, l'intercepteur, etc. Il est recommandé de simplifier les opérations de demande asynchrones; 3.Node-Fetch fournit un style similaire à la récupération du navigateur, basé sur la promesse et la syntaxe simple

Les types de données JavaScript sont divisés en types primitifs et types de référence. Les types primitifs incluent la chaîne, le nombre, le booléen, le nul, un non défini et le symbole. Les valeurs sont immuables et les copies sont copiées lors de l'attribution des valeurs, de sorte qu'elles ne se affectent pas; Les types de référence tels que les objets, les tableaux et les fonctions stockent les adresses de mémoire, et les variables pointant vers le même objet s'afferchent mutuellement. Le typeof et l'instance de OFF peuvent être utilisés pour déterminer les types, mais prêtent attention aux problèmes historiques de typeofnull. Comprendre ces deux types de différences peut aider à écrire un code plus stable et fiable.

La méthode Filter () dans JavaScript est utilisée pour créer un nouveau tableau contenant tous les éléments de test de passage. 1.Filter () ne modifie pas le tableau d'origine, mais renvoie un nouveau tableau qui répond aux éléments conditionnels; 2. La syntaxe de base est array.filter ((élément) => {returnCondition;}); 3. Le tableau d'objets peut être filtré par valeur d'attribut, comme le filtrage des utilisateurs de plus de 30 ans; 4. Prise en charge du filtrage multi-conditions, comme remplir les conditions d'âge et de longueur de nom en même temps; 5. Peut gérer les conditions dynamiques et passer les paramètres du filtre dans les fonctions pour réaliser un filtrage flexible; 6. Lorsque vous l'utilisez, veillez à retourner les valeurs booléennes pour éviter de retourner des tableaux vides et combinez d'autres méthodes pour obtenir une logique complexe telle que la correspondance de chaînes.

Dans JavaScript, vérifiez si un tableau contient une certaine valeur. La méthode la plus courante est Inclut (), qui renvoie une valeur booléenne et la syntaxe est Array.Cuecludes (ValueToFind), par exemple les fruits.Cuels («banane») Renvoie vrai; S'il doit être compatible avec l'ancien environnement, utilisez l'indexof (), comme nombres.indexof (20)! == - 1 Renvoie True; Pour les objets ou les données complexes, une méthode () doit être utilisée pour une comparaison approfondie, telles que les utilisateurs.Some (user => user.id === 1) renvoie true.

Pour gérer les erreurs dans les fonctions asynchrones, utilisez Try / Catch, gérez-les dans la chaîne d'appels, utilisez la méthode .catch () et écoutez les événements non performisés. 1. Utiliser Try / Catch pour attraper les erreurs est la méthode recommandée, avec une structure claire et peut gérer les exceptions en attente; 2. Les erreurs de traitement dans la chaîne d'appels peuvent être une logique centralisée, qui convient aux processus en plusieurs étapes; 3. Utilisez .Catch () pour attraper des erreurs après avoir appelé la fonction asynchrone, qui convient aux scénarios de combinaison de promesses; 4. Écoutez les événements de l'abri de la Fixation pour enregistrer les refus non performes comme la dernière ligne de défense; Les méthodes ci-dessus garantissent conjointement que les erreurs asynchrones sont correctement capturées et traitées.

La clé pour traiter les problèmes de fuseau horaire JavaScript est de choisir la bonne méthode. 1. Lorsque vous utilisez des objets de date native, il est recommandé de stocker et de transférer dans le temps UTC et de le convertir au fuseau horaire local de l'utilisateur lors de l'affichage; 2. Pour les opérations de fuseau horaire complexes, le moment-temps peut être utilisé, qui prend en charge la base de données du fuseau horaire IANA et offre des fonctions de mise en forme et de conversion pratiques; 3. Si vous avez besoin de localiser l'heure d'affichage et que vous ne souhaitez pas introduire des bibliothèques tierces, vous pouvez utiliser intl.datetimeFormat; 4. Il est recommandé au jour moderne de la solution légère et du plug-in de solution légère et de fuseau horaire et UTC, qui a une API concise, de bonnes performances et prend en charge la conversion du fuseau horaire.

Virtual Dom est un concept de programmation qui optimise les mises à jour réelles DOM. En créant une structure d'arbre correspondant au DOM réel en mémoire, il évite le fonctionnement fréquent et direct du DOM réel. Son principe de base est: 1. Générer un nouveau DOM virtuel lorsque les données changent; 2. Trouvez la plus petite différence entre les nouveaux et les anciens doms virtuels; 3. Mise à jour par lots du DOM réel pour réduire les frais généraux de réarrangement et de redémarrage. De plus, l'utilisation d'une clé stable unique peut améliorer l'efficacité de comparaison de la liste, tandis que certains cadres modernes ont adopté d'autres technologies pour remplacer le DOM virtuel.

FunctionalProgrammingInjavascriptEmphasizesClean, prédictioncodethroughcoreConcepts.1.purefonctionnement de la recherche de nom
