Skip to main content
Back to problems
#1944
Hard Algorithms

Number of visible people in a queue

Array Stack Monotonic Stack
72.4% acceptance
Feb 25, 2026
2161
67
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.

Solution

Rust
Time O(n²)
Space O(n)
LeetCode
solution.rs
impl Solution {
  pub fn can_see_persons_count(heights: Vec<i32>) -> Vec<i32> {
    let n = heights.len();
    let mut ans = vec![0i32; n];
    let mut stack: Vec<usize> = Vec::new(); // monotonic decreasing stack

    for i in (0..n).rev() {
      let mut count = 0;
      while let Some(&top) = stack.last() {
        count += 1;
        if heights[top] < heights[i] {
          stack.pop();
        } else {
          break;
        }
      }
      ans[i] = count;
      stack.push(i);
    }
    ans
  }
}