Étant donné un tableau entier nums, renvoie une réponse de tableau telle que la réponse[i] est égale au produit de tous les éléments de nums sauf nums[i].
Le produit de tout préfixe ou suffixe de nombres est garanti pour tenir dans un entier de 32 bits.
Vous devez écrire un algorithme qui s'exécute en un temps O(n) et sans utiliser l'opération de division.
Pouvez-vous résoudre le problème de la complexité spatiale supplémentaire O(1) ? (Le tableau de sortie ne compte pas comme espace supplémentaire pour l'analyse de la complexité de l'espace.)
Pour résoudre ce problème, nous devons calculer le produit de tous les éléments sauf l'élément actuel sans utiliser l'opération de division. Cela peut être fait en utilisant deux passes sur le tableau :
Nous pouvons utiliser deux tableaux pour stocker les produits de préfixe et de suffixe, puis les multiplier pour obtenir le résultat final.
function productExceptSelf(nums: number[]): number[] { const n = nums.length; const prefixProducts = new Array(n).fill(1); const suffixProducts = new Array(n).fill(1); const result = new Array(n).fill(1); // Compute prefix products for (let i = 1; i = 0; i--) { suffixProducts[i] = suffixProducts[i 1] * nums[i 1]; } // Compute the result by multiplying prefix and suffix products for (let i = 0; iAnalyse de la complexité temporelle :
La solution de base fonctionne bien mais utilise un espace supplémentaire pour stocker les produits de préfixe et de suffixe.
Nous pouvons optimiser la solution pour utiliser l'espace supplémentaire O(1) en utilisant d'abord le tableau de sortie pour stocker les produits de préfixe, puis le modifier sur place pour inclure les produits de suffixe.
function productExceptSelfOptimized(nums: number[]): number[] { const n = nums.length; const result = new Array(n).fill(1); // Compute prefix products in the result array for (let i = 1; i = 0; i--) { result[i] = result[i] * suffixProduct; suffixProduct *= nums[i]; } return result; }
console.log(productExceptSelf([1,2,3,4])); // [24,12,8,6] console.log(productExceptSelf([-1,1,0,-3,3])); // [0,0,9,0,0] console.log(productExceptSelf([2,2,2,2])); // [8,8,8,8] console.log(productExceptSelf([0,0])); // [0,0] console.log(productExceptSelf([5])); // This should not be a valid input as the minimum length is 2 console.log(productExceptSelf([1,2])); // [2, 1] console.log(productExceptSelfOptimized([1,2,3,4])); // [24,12,8,6] console.log(productExceptSelfOptimized([-1,1,0,-3,3])); // [0,0,9,0,0] console.log(productExceptSelfOptimized([2,2,2,2])); // [8,8,8,8] console.log(productExceptSelfOptimized([0,0])); // [0,0] console.log(productExceptSelfOptimized([5])); // This should not be a valid input as the minimum length is 2 console.log(productExceptSelfOptimized([1,2])); // [2, 1]
Tableau de somme de préfixes :
Algorithmes sur place :
Manipulation du tableau :
En pratiquant de tels problèmes et stratégies, vous pouvez améliorer vos compétences en résolution de problèmes et être mieux préparé à relever divers défis de codage.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3