leetcode 1944. Nombre de personnes visibles dans une file d'attente (python)

L'offre arrive, creusez des amis pour ramasser! Je participe à l'événement de vérification du recrutement du printemps 2022, cliquez pour voir les détails de l'événement

décris

Il y a n personnes debout dans une file d'attente, et elles sont numérotées de 0 à n - 1 dans l'ordre de gauche à droite. On vous donne un tableau hauteurs d'entiers distincts où hauteurs[i] représente la taille de la i ème personne. Une personne peut voir une autre personne à sa droite dans la file d'attente si tout le monde entre les deux est plus petit que les deux. Plus formellement, la i ème personne peut voir la j ème personne si i < j et min(heights[i], heights[j]) > max(heights[i+1], heights[i+2], ... , hauteurs[j-1]). Renvoie un tableau answer de longueur n où answer[i] est le nombre de personnes que la i ème personne peut voir à sa droite dans la file d'attente.

Exemple 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.
复制代码

Noter:

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

Analyser

Selon le sens de la question, il y a n personnes debout dans la file d'attente, numérotées de 0 à n - 1 dans l'ordre de gauche à droite. Soit un tableau hauteurs d'entiers distincts, où hauteurs[i] représente la taille de la ième personne. Chaque personne ne peut voir que les personnes dans la ligne de mire vers la droite et renvoie une réponse de tableau de longueur n, où réponse[i] est le nombre de personnes visibles à droite de la ième personne dans la file d'attente.

Grâce à l'exemple 1, nous pouvons constater que les hauteurs de chaque personne[i] ne peuvent voir que la hauteur du côté droit est inférieure ou égale à sa propre taille, et la hauteur augmente, et la personne qui se trouve dans la "vallée de la hauteur " sur le côté droit ne peut pas être vu par le côté gauche. Les gens qui voient qu'il s'agit essentiellement d'examiner une pile monotone. On peut maintenir une séquence de hauteurs décroissantes de droite à gauche. Lorsqu'une nouvelle hauteur h est trouvée, on fera apparaître les hauteurs inférieures à h en haut de la pile (parce que plusieurs personnes sont bloquées par h, et elles ne seront pas vues derrière), et comptera les personnes qui peuvent être vues à droite de h. Si la pile n'est pas vide à ce moment, comptez + 1, car au moins un à droite est supérieur ou égal à h Une personne de la taille peut être vue. Répétez ce processus pour trouver la réponse.

répondre

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
            
            
		
复制代码

résultat de l'opération

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.
复制代码

Lien du titre original : leetcode.com/problems/nu…

Votre soutien est ma plus grande motivation

Acho que você gosta

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