860. Changement de limonade
Difficulté :Facile
Sujets :Array, gourmand
Dans un stand de limonade, chaque limonade coûte 5 $. Les clients font la queue pour acheter chez vous et commander un par un (dans l'ordre spécifié par les factures). Chaque client n'achètera qu'une seule limonade et paiera avec un billet de 5 $, 10 $ ou 20 $. Vous devez fournir la monnaie correcte à chaque client afin que la transaction nette soit que le client paie 5 $.
Notez que vous n'avez dans un premier temps aucune monnaie en main.
Étant donné un tableau d'entiers bills où bills[i] est la facture que leième client paie, retournez true si vous pouvez fournir à chaque client la monnaie correcte, ou false sinon .
Exemple 1 :
-
Entrée : factures = [5,5,5,10,20]
-
Sortie : vrai
-
Explication :
- Dès les 3 premiers clients, nous récupérons trois billets de 5$ dans l'ordre.
- Dès le quatrième client, nous récupérons une facture de 10$ et en rendons 5$.
- À partir du cinquième client, nous remettons une facture de 10$ et une facture de 5$.
- Puisque tous les clients ont reçu la monnaie correcte, nous produisons vrai.
Exemple 2 :
-
Entrée : factures = [5,5,10,10,20]
-
Sortie : faux
-
Explication :
- Dès les deux premiers clients en commande, nous récupérons deux billets de 5$.
- Pour les deux prochains clients en commande, nous récupérons une facture de 10$ et rendons une facture de 5$.
- Pour le dernier client, nous ne pouvons pas rendre la monnaie de 15$ car nous n'avons que deux billets de 10$.
- Comme tous les clients n'ont pas reçu la bonne monnaie, la réponse est fausse.
Contraintes :
- 5
-
bills[i] vaut 5, 10 ou 20.
Solution :
Nous devons simuler le processus de fourniture de monnaie aux clients en fonction des factures qu'ils utilisent pour payer. La clé est de suivre le nombre de billets de 5 $ et de 10 $ que vous possédez, car ils sont nécessaires pour rendre la monnaie aux billets plus gros
Implémentons cette solution en PHP : 860. Changement de limonade
Explication:
Initialisation : Nous commençons avec cinq $ et dix $ fixés à 0, ce qui représente le nombre de billets de 5 $ et 10 $ que nous avons.
-
Traitement de chaque facture :
-
Si le client paie avec une facture de 5 $ : Nous incrémentons simplement le nombre de factures de 5 $.
-
Si le client paie avec une facture de 10 $ : Nous devons rendre une facture de 5 $ en guise de monnaie, nous décrémentons donc le nombre de billets de 5 $ et incrémentons le nombre de billets de 10 $. Si nous n'avons pas de billets de 5 $, renvoyez false.
-
Si le client paie avec une facture de 20 $ : Nous donnons en priorité une facture de 10 $ et une facture de 5 $ en guise de monnaie. Si ce n'est pas possible, nous essayons de donner trois billets de 5 $. Si aucune des deux options n'est disponible, renvoyez false.
Vérification finale : Si nous avons traité avec succès tous les clients sans manquer de monnaie, renvoyez vrai.
Cas extrêmes :
- La fonction doit gérer les scénarios dans lesquels il est impossible de rendre la monnaie correcte, par exemple lorsque vous recevez un billet de 10 $ ou 20 $ trop tôt sans avoir le(s) billet(s) de 5 $ nécessaire(s) sous la main.
- Il devrait gérer efficacement des entrées de grande taille en raison des contraintes (jusqu'à 100 000 clients). La solution s'exécute dans une complexité temporelle O(n), ce qui la rend optimale pour ce 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!