Retour aux défis
Moyen 0 résolus 0 % de réussite

Plus grand produit de chiffres adjacents

Considérez chaque fenêtre contiguë de span chiffres et multipliez ses chiffres.

Ce que vous allez apprendre

  • Examiner chaque fenêtre de taille fixe
  • Multiplier les chiffres d'une fenêtre
  • Suivre le meilleur produit

Problème

Considérez chaque fenêtre contiguë de span chiffres et multipliez ses chiffres. Retournez le plus grand produit obtenu. Les zéros initiaux sont des chiffres ordinaires ; une fenêtre contenant un zéro a un produit nul. Ne réordonnez ni ne sautez aucun chiffre.

Implémentez largest_adjacent_digit_product(digits, span).

Entrée

digits : La séquence de chiffres, y compris les éventuels zéros initiaux.

span : Le nombre exact de chiffres adjacents dans une fenêtre.

Sortie

Retournez le plus grand produit parmi toutes les fenêtres de cette largeur.

Contraintes

1 ≤ longueur de la chaîne de chiffres ≤ 100 000. Les caractères sont 0…9. 1 ≤ span ≤ min(18, longueur). Tous les produits tiennent dans un entier signé 64 bits.

Exemples

Exemple 1
Entrée :
span = 2
digits = "23405"

Sortie attendue :
expected = 12
Entrée :
long long span = 2;
std::string digits = "23405";

Sortie attendue :
long long expected = 12;
Entrée :
long span = 2;
string digits = "23405";

Sortie attendue :
long expected = 12;

Explication

Les fenêtres 23, 34, 40 et 05 ont pour produits 6, 12, 0 et 0. Le plus grand est 12.

Exemple 2
Entrée :
span = 3
digits = "102"

Sortie attendue :
expected = 0
Entrée :
long long span = 3;
std::string digits = "102";

Sortie attendue :
long long expected = 0;
Entrée :
long span = 3;
string digits = "102";

Sortie attendue :
long expected = 0;

Explication

Il n'y a qu'une seule fenêtre de largeur trois. Elle contient un zéro, donc 1 × 0 × 2 = 0.

Comment l'aborder

Essayez d'abord seul, puis ouvrez les indices un par un.

Indice 1

Un zéro dans une fenêtre force ce produit à zéro, donc seules les suites contiguës sans zéro peuvent contribuer au maximum.

Indice 2

Utilisez une fenêtre glissante ou suivez les produits sur les suites de chiffres pour éviter de recalculer chaque intervalle depuis zéro.

Indice 3

Attention à la taille exacte de l’intervalle : les zéros en tête comptent comme des chiffres, et si l’intervalle dépasse une suite non nulle, le produit est zéro.

Complexité attendue

temps O(n), espace supplémentaire O(1)

Références

Ce défi a été adapté pour CodeUtility. Suivez l'énoncé et les contraintes ci-dessus.

Apprenez des autres

Solutions de la communauté

Aucune solution publiée pour l'instant. Résolvez ce défi pour partager la première.