There are n people standing in a queue, and they numbered from 0 to n - 1 in left to right order. You are given an array heights of distinct integers where heights[i] represents the height of the ith person.
A person can see another person to their right in the queue if everybody in between is shorter than both of them. More formally, the ith person can see the jth person if i < j and min(heights[i], heights[j]) > max(heights[i+1], heights[i+2], ..., heights[j-1]).
Return an array answer of length n where answer[i] is the number of people the ith person can see to their right in the queue.
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.
Input: heights = [5,1,2,3,10]
Output: [4,1,1,1,0]
heights are unique.The simplest way to solve this problem is to use a double loop. For each person in the queue, we can look at each subsequent person and determine if they're visible. A person is visible if all the people between them and the current person in the focus are shorter. Once we find a taller person, all subsequent people are not visible.
result to store the number of visible people for each person in the queue.i, look at each subsequent person j (where j > i).j is taller than the person at i, they are visible, and we can break out of the loop since no one beyond them can be visible to person i.i until a taller person is encountered.result.To reduce the time complexity, we can use a stack to maintain a list of indices. This stack helps us efficiently track the tallest visible people as we traverse the queue from right to left. By using a stack, we can keep removing shorter people who are no longer visible whenever we encounter a taller person farther in the queue.
result to store answer.