LeetCodeDifficult- [84. El rectángulo más grande en el histograma]

Dado  n  enteros no negativos, se utiliza para representar la altura de cada columna en el histograma. Cada pilar es adyacente entre sí y tiene un ancho de 1.

Encuentre el área máxima del rectángulo que se puede delinear en este histograma.

Lo anterior es un ejemplo de un histograma, donde cada columna tiene un ancho de 1 y una altura determinada es  [2,1,5,6,2,3].

Ejemplo:

Entrada: [2,1,5,6,2,3]
 Salida: 10

Idea: Pila (habilidad centinela)

Explicación detallada: https://leetcode-cn.com/problems/largest-rectangle-in-histogram/solution/bao-li-jie-fa-zhan-by-liweiwei1419/

Breve descripción:

Use una pila para almacenar el índice de cada columna, atraviese el conjunto de alturas, si la altura actual es mayor o igual que la altura anterior, el índice se agregará a la pila; de lo contrario, debe cumplir con las alturas [i] <alturas [pila [- Los elementos de 1]] se expulsan de la pila en secuencia, y se calcula el rectángulo más grande que pueden formar.

Puntos a tener en cuenta:

1. Debe agregar un 0 antes y después de la matriz original, de modo que debe haber un valor menor que los elementos de la matriz de altura.

2. Cada vez que la pila aparece primero, se lee el subíndice del elemento superior de la pila y se calcula el ancho del rectángulo actual.

class Solution:
    def largestRectangleArea(self, heights: List[int]) -> int:
        max_area = 0
        heights = [0] + heights + [0]
        stack = []
        for i in range(len(heights)):
            while len(stack) > 0 and heights[i] < heights[stack[-1]]:
                top = stack.pop() # 需要提前弹出!!!
                max_area = max(max_area, heights[top] * (i - stack[-1] - 1))
            stack.append(i)
        return max_area

 

Publicado 314 artículos originales · 22 alabanzas · Más de 20,000 visitas

Supongo que te gusta

Origin blog.csdn.net/qq_39451578/article/details/105052846
Recomendado
Clasificación