Menu
CoddyTech

Largest Rectangle in Histogram

DifficilePile monotonepython iconjava iconcpp iconc iconjs icon+10

Un histogramme est une rangée de barres côte à côte sans espaces, chacune large d’une unité : heights[i] est la hauteur de la barre i. Un rectangle à l’intérieur couvre une série de barres voisines et ne peut pas être plus haut que la barre la plus courte de cette série.

Renvoyez la plus grande aire que peut avoir un tel rectangle.

Fonction

largestRectangleArea(heights: integer-array) → integer
heightsinteger-array
la hauteur de chaque barre, de gauche à droite
Renvoieinteger
l’aire du plus grand rectangle pouvant tenir dans l’histogramme

Contraintes

  • 1 ≤ heights.length ≤ 2 × 104
  • 0 ≤ heights[i] ≤ 105
  • Chaque barre a une largeur d’une unité ; un rectangle couvrant les barres i à j a donc une largeur de j-i+1 unités.

Exemples

Entrée
heights = [2, 5, 6, 3, 4, 1]
Sortie
12
Explication
Les quatre barres de hauteur 5, 6, 3 et 4 font toutes au moins 3 de haut, donc un rectangle de hauteur 3 les couvre : 3 × 4 = 12. Les deux barres les plus hautes, 5 et 6, ne donnent que 5 × 2 = 10.

lock icon+17 tests cachés à la soumission

challenge icon

Pour aller plus loin

Supposons que chaque barre ait sa propre largeur, indiquée dans un second tableau. Qu’est-ce qui change dans la solution en une seule passe avec une pile ?

Réinitialiser le code
def largestRectangleArea(heights):
    # Écrivez le code ici
Cas de test

Cas 1

Cas 2

Cas 3

Entrée

heights = [2, 5, 6, 3, 4, 1]

Attendu

12