2070. Le plus bel article pour chaque requête
Difficulté :Moyen
Sujets : Tableau, recherche binaire, tri
Vous recevez un tableau d'entiers 2D items où items[i] = [pricei, beautyi] désigne le prix et beauté d'un article respectivement.
Vous recevez également des requêtes sur un tableau d'entiers indexés à 0. Pour chaque requête[j], vous souhaitez déterminer la beauté maximale d'un article dont le prix est inférieur ou égal aux requêtes[j]. Si aucun élément de ce type n'existe, alors la réponse à cette requête est 0.
Renvoyer un tableau de réponse de la même longueur que les requêtes où réponse[j] est la réponse à la jième requête.
Exemple 1 :
-
Entrée : éléments = [[1,2],[3,2],[2,4],[5,6],[3,5]], requêtes = [1,2,3 ,4,5,6]
-
Sortie : [2,4,5,5,6,6]
-
Explication :
- Pour les requêtes[0]=1, [1,2] est le seul article dont le prix est <= 1. Par conséquent, la réponse à cette requête est 2.
- Pour les requêtes[1]=2, les éléments qui peuvent être considérés sont [1,2] et [2,4].
- La beauté maximale parmi eux est de 4.
- Pour les requêtes[2]=3 et les requêtes[3]=4, les éléments qui peuvent être pris en compte sont [1,2], [3,2], [2,4] et [3,5].
- La beauté maximale parmi eux est de 5.
- Pour les requêtes[4]=5 et les requêtes[5]=6, tous les éléments peuvent être pris en compte.
- Par conséquent, la réponse pour eux est la beauté maximale de tous les objets, c'est-à-dire 6.
Exemple 2 :
-
Entrée : éléments = [[1,2],[1,2],[1,3],[1,4]], requêtes = [1]
-
Sortie : [4]
-
Explication : Le prix de chaque article est égal à 1, nous choisissons donc l'article avec la beauté maximale 4.
- Notez que plusieurs articles peuvent avoir le même prix et/ou la même beauté.
Exemple 3 :
-
Entrée : éléments = [[10,1000]], requêtes = [5]
-
Sortie : [0]
-
Explication : Aucun article n'a un prix inférieur ou égal à 5, aucun article ne peut donc être choisi.
- Par conséquent, la réponse à la requête est 0.
Contraintes :
- 1 <= items.length, queries.length <= 105
- articles[i].length == 2
- 1 <= prixi, beautéi, requêtes[j] <= 109
Indice :
- Pouvons-nous traiter les requêtes dans un ordre intelligent pour éviter de vérifier à plusieurs reprises les mêmes éléments ?
- Comment pouvons-nous utiliser la réponse à une requête pour d'autres requêtes ?
Solution :
Nous pouvons utiliser des techniques de tri et de recherche binaire. Voici le plan :
Approche
-
Trier les articles par prix :
- Tout d’abord, triez les articles selon leur prix. De cette façon, au fur et à mesure que nous parcourons les articles, nous pouvons garder une trace de la beauté maximale observée jusqu'à présent pour les articles jusqu'à un prix donné.
-
Trier les requêtes avec leurs indices d'origine :
- Créez un tableau de requêtes associées à leurs indices d'origine, puis triez ce tableau en fonction des valeurs de requête.
- Le tri est utile car nous pouvons traiter les requêtes par ordre croissant de prix et éviter de recalculer les valeurs de beauté pour des prix inférieurs à plusieurs reprises.
-
Parcourir simultanément les éléments et les requêtes :
- À l'aide de deux pointeurs, traitez chaque requête :
- Pour chaque requête, déplacez le pointeur sur les articles dont le prix est inférieur ou égal au prix de la requête.
- Suivez la beauté maximale au fur et à mesure que vous parcourez ces éléments et utilisez cette valeur pour répondre à la requête en cours.
- Cela évite de vérifier à plusieurs reprises les éléments pour plusieurs requêtes.
-
Résultats du magasin et des retours :
- Une fois traité, stockez le résultat de beauté maximum pour chaque requête en fonction de l'index d'origine pour maintenir l'ordre.
- Renvoyer le tableau de réponses.
Implémentons cette solution en PHP : 2070. Le plus bel article pour chaque requête
Explication:
-
Tri des éléments et des requêtes : Cela permet un traitement efficace sans calculs redondants.
-
Technique à deux pointeurs : parcourir les éléments une seule fois pour chaque requête évite des calculs excessifs.
-
Suivre maxBeauty : Nous mettons à jour maxBeauty progressivement, permettant à chaque requête d'accéder à la plus haute beauté vue jusqu'à présent.
Complexité
-
Complexité temporelle : O(n log n m log m) pour trier les éléments et les requêtes, et O(n m) pour le traitement, où n est la longueur des éléments et m est la longueur des requêtes.
-
Complexité spatiale : O(m) pour stocker les résultats.
Cette solution est efficace et répond aux contraintes du problème.
Liens de contact
Si vous avez trouvé cette série utile, pensez à donner une étoile au référentiel sur GitHub ou à partager la publication sur vos réseaux sociaux préférés ?. Votre soutien signifierait beaucoup pour moi !
Si vous souhaitez du contenu plus utile comme celui-ci, n'hésitez pas à me suivre :
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: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