Le problème « Two Sum II – Le tableau d'entrée est trié » est un défi de codage classique qui teste votre compréhension des tableaux et de la manipulation des pointeurs. C’est aussi une belle opportunité de présenter une solution à la fois élégante et efficace. Plongeons dans le problème et décomposons une approche optimale pour le résoudre.
Lien vers le problème sur LeetCode
Étant donné un tableau de nombres entiers indexés sur 1 triés par ordre non décroissant, votre objectif est de trouver deux nombres tels que leur somme soit égale à un objectif donné. Vous devez renvoyer les indices de ces deux nombres sous forme de tableau [index1, index2] où 1 <= index1 < index2 <= nombres.longueur. La solution ne doit utiliser qu'un espace supplémentaire constant.
Entrée : nombres = [2,7,11,15], cible = 9
Sortie : [1, 2]
Entrée : nombres = [2,3,4], cible = 6
Sortie : [1, 3]
Entrée : nombres = [-1,0], cible = -1
Sortie : [1, 2]
Les contraintes du problème (un tableau trié et une solution unique) en font un candidat parfait pour la technique à deux pointeurs. Voici pourquoi :
Vous trouverez ci-dessous l'implémentation JavaScript de l'approche à deux points :
/** * @param {number[]} nums * @param {number} target * @return {number[]} */ var twoSum = function(nums, target) { const length = nums.length; let rightPointer = length - 1; let leftPointer = 0; while (leftPointer < rightPointer) { if (nums[leftPointer] + nums[rightPointer] === target) { return [leftPointer + 1, rightPointer + 1]; } if (nums[leftPointer] + nums[rightPointer] > target) { rightPointer--; } else { leftPointer++; } } };Comment ça marche
Initialiser deux pointeurs :
- leftPointer commence au début du tableau.
- rightPointer commence à la fin du tableau.
Itérer jusqu'à ce qu'ils se rencontrent :
- Calculez la somme des éléments à leftPointer et rightPointer.
- Si la somme correspond à l'objectif, renvoie les positions indexées 1.
- Si la somme est supérieure à l'objectif, décrémentez le rightPointer pour réduire la somme.
- Si la somme est inférieure à l'objectif, incrémentez le leftPointer pour augmenter la somme.
Renvoyer les indices :
- Une fois la bonne paire trouvée, la boucle se termine et renvoie les indices.
Exemple de procédure pas à pas
Parcourons le premier exemple :
La méthode à deux pointeurs résout élégamment le problème « Two Sum II - Le tableau d'entrée est trié » en exploitant la nature triée du tableau d'entrée. Il s’agit d’une technique puissante qui non seulement garantit l’efficacité, mais respecte également les contraintes d’espace, ce qui en fait une approche incontournable pour des problèmes similaires. Bon codage !
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!