### sandeepgogarla61's blog

By sandeepgogarla61, history, 2 years ago,

problem link : https://leetcode.com/problems/number-of-visible-people-in-a-queue/ approach for the above mentioned question when duplicates are allowed

eg test case : 11 6 7 5 11 11 o/p : 3 2 2 1 1 0

• -11

| Write comment?
 » 2 years ago, # |   +8 Looks solvable with an increasing stack
•  » » 2 years ago, # ^ | ← Rev. 2 →   0 ok
•  » » » 2 years ago, # ^ | ← Rev. 2 →   0 I looked at the question again and it's supposed to be a decreasing stack not an increasing stack. My solution for original qn (in Python) Code:class Solution:____def canSeePersonsCount(self, heights: List[int]) -> List[int]:________a = heights________n = len(a)________stack = [] # decreasing stack________ans = [-1] * n________for i in range(n — 1, -1, -1):____________cnt = 0____________while len(stack) > 0 and a[stack[-1]] < a[i]:________________cnt += 1________________stack.pop()____________if len(stack) > 0:________________ans[i] = cnt + 1____________else:________________ans[i] = cnt____________stack.append(i)________return ansIf you want to work with duplicated elements, at a[i] you need to add an additional factor k — 1 if the last element in stack after popping is also a[i]. k is the number of elements in the stack equivalent to a[i], which you can binary search since the stack is decreasing.
•  » » » » 2 years ago, # ^ |   0 Sorry my described method for duplicate cases won't work. You need to handle cases like 5 3 3 4 4 3 3 4 4 5. Maybe a decreasing stack storing [value, counts] might work. You'll need to figure out how to merge the counts for repeated elements and to add the counts when popping off the stack.
 » 2 years ago, # |   0 Hey Sandeep,What is your solution for the case when all heights are different? I think [this solution] for example, (https://leetcode.com/problems/number-of-visible-people-in-a-queue/discuss/1961776/Number-of-Visible-People-in-a-Queue) should work in both cases.
•  » » 2 years ago, # ^ |   0 It is Not working , when duplicates heights are given :|
•  » » » 2 years ago, # ^ |   0 I think it should work. The person 'i' cannot see anything beyond person 'j' if heights[i] <= heights[j]. The expected result for your example is '3 1 2 1 1 0'. I think you have a typo for the second number, right?Notice, that LeetCode rejects inputs with repeated elements, but this does not mean the solution does not work.