Étant donné un tableau d'entiers nums, renvoie true s'il existe un triplet d'indices (i, j, k) tel que i
Pouvez-vous implémenter une solution qui s'exécute dans une complexité temporelle O(n) et une complexité spatiale O(1) ?
Pour résoudre ce problème efficacement, nous devons garder une trace des plus petites et des deuxièmes plus petites valeurs rencontrées jusqu'à présent. Si nous trouvons une troisième valeur supérieure à la deuxième plus petite, alors nous avons trouvé un triplet croissant.
La solution par force brute consiste à vérifier tous les triplets possibles pour voir s'il en existe un qui satisfait à la condition i
function increasingTripletBruteForce(nums: number[]): boolean { const n = nums.length; for (let i = 0; iAnalyse de la complexité temporelle :
La solution par force brute n'est pas efficace et n'est pas adaptée aux grandes tailles d'entrée.
La solution optimisée consiste à parcourir le tableau tout en conservant deux variables, la première et la seconde, qui représentent les plus petites et les deuxièmes plus petites valeurs rencontrées jusqu'à présent. Si nous trouvons une valeur supérieure à la seconde, alors nous renvoyons vrai.
function increasingTriplet(nums: number[]): boolean { let first = Infinity; let second = Infinity; for (let num of nums) { if (numAnalyse de la complexité temporelle :
console.log(increasingTripletBruteForce([1,2,3,4,5])); // true console.log(increasingTripletBruteForce([5,4,3,2,1])); // false console.log(increasingTripletBruteForce([2,1,5,0,4,6])); // true console.log(increasingTripletBruteForce([1,1,1,1,1])); // false console.log(increasingTripletBruteForce([1,2])); // false console.log(increasingTripletBruteForce([1,2,3])); // true console.log(increasingTripletBruteForce([1,5,0,4,1,3])); // true console.log(increasingTriplet([1,2,3,4,5])); // true console.log(increasingTriplet([5,4,3,2,1])); // false console.log(increasingTriplet([2,1,5,0,4,6])); // true console.log(increasingTriplet([1,1,1,1,1])); // false console.log(increasingTriplet([1,2])); // false console.log(increasingTriplet([1,2,3])); // true console.log(increasingTriplet([1,5,0,4,1,3])); // true
Problèmes de sous-tableau :
Technique à deux pointeurs :
Algorithmes sur place :
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