leetcode 1944. Número de personas visibles en una cola (python)

Llega oferta, cava amigos a recoger! Estoy participando en el evento de registro de reclutamiento de primavera de 2022, haga clic para ver los detalles del evento

describir

Hay n personas en una cola, y están numeradas de 0 a n - 1 en orden de izquierda a derecha. Se le proporciona una matriz de alturas de enteros distintos donde alturas[i] representa la altura de la i -ésima persona. Una persona puede ver a otra persona a su derecha en la cola si todos los que están en el medio son más bajos que ambos. Más formalmente, la i -ésima persona puede ver a la j -ésima persona si i < j y min(alturas[i], alturas[j]) > max(alturas[i+1], alturas[i+2], ... , alturas[j-1]). Devuelve una respuesta de matriz de longitud n donde respuesta[i] es el número de personas que la i -ésima persona puede ver a su derecha en la cola.

Ejemplo 1:

Input: heights = [10,6,8,5,11,9]
Output: [3,1,2,1,1,0]
Explanation:
Person 0 can see person 1, 2, and 4.
Person 1 can see person 2.
Person 2 can see person 3 and 4.
Person 3 can see person 4.
Person 4 can see person 5.
Person 5 can see no one since nobody is to the right of them.
复制代码

Nota:

n == heights.length
1 <= n <= 105
1 <= heights[i] <= 105
All the values of heights are unique.
复制代码

Analizar gramaticalmente

De acuerdo con el significado de la pregunta, hay n personas en la fila, numeradas de 0 a n - 1 en orden de izquierda a derecha. Dada una matriz alturas de enteros distintos, donde alturas[i] representa la altura de la i-ésima persona. Cada persona solo puede ver a las personas en la línea de visión a la derecha y devuelve una respuesta de matriz de longitud n, donde respuesta[i] es el número de personas visibles a la derecha de la i-ésima persona en la cola.

A través del ejemplo 1, podemos encontrar que las alturas de cada persona [i] solo pueden ver que la altura en el lado derecho es menor o igual a su propia altura, y la altura aumenta, y la persona que está en el "valle de altura " en el lado derecho no puede ser visto por el lado izquierdo. Las personas que ven que esto es esencialmente una cuestión de examinar una pila monótona. Podemos mantener una secuencia de alturas decrecientes de derecha a izquierda. Cuando se encuentra una nueva altura h, aparecerán las alturas más pequeñas que h en la parte superior de la pila (porque h bloquea varias personas y no se las verá detrás) y contará las personas que se pueden ver a la derecha de h. no está vacío en este momento, cuenta+1, porque al menos uno a la derecha es mayor o igual a h Se puede ver una persona de la altura. Repita este proceso para encontrar la respuesta.

responder

class Solution(object):
    def canSeePersonsCount(self, heights):
        """
        :type heights: List[int]
        :rtype: List[int]
        """
        N = len(heights)
        stack = []
        result = [0] * N
        for i in range(N-1, -1, -1):
            count = 0
            while stack and heights[i]>heights[stack[-1]]:
                count += 1
                stack.pop()
            if stack:
                count += 1
            result[i] = count
            stack.append(i)
        return result
            
            
		
复制代码

resultado de la operación

Runtime: 1112 ms, faster than 70.59% of Python online submissions for Number of Visible People in a Queue.
Memory Usage: 26.5 MB, less than 38.24% of Python online submissions for Number of Visible People in a Queue.
复制代码

Enlace del título original: leetcode.com/problems/nu…

Tu apoyo es mi mayor motivación.

Supongo que te gusta

Origin juejin.im/post/7078841109593456670
Recomendado
Clasificación