LeetCode 1944. Number of Visible People in a Queue
原题链接在这里:https://leetcode.com/problems/number-of-visible-people-in-a-queue/description/
题目:
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.
Example 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.
Example 2:
Input: heights = [5,1,2,3,10] Output: [4,1,1,1,0]
Constraints:
n == heights.length
1 <= n <= 105
1 <= heights[i] <= 105
- All the values of
heights
are unique.
题解:
From left to right, maintain a mono decreasing stack. Use the index in the stack.
When hitting a number >= stk top, stk top index could see this new number. res[stk.pop()]++.
After popping, if there is still index in the stk. that index could also see the new number.
Then push the latest index into stack.
Time Complexity: O(n). n = heights.length.
Space: O(n).
AC Java:
1 class Solution { 2 public int[] canSeePersonsCount(int[] heights) { 3 int n = heights.length; 4 int[] res = new int[n]; 5 Stack<Integer> stk = new Stack<>(); 6 for(int i = 0; i < n; i++){ 7 while(!stk.isEmpty() && heights[stk.peek()] <= heights[i]){ 8 res[stk.pop()]++; 9 } 10 11 if(!stk.isEmpty()){ 12 res[stk.peek()]++; 13 } 14 15 stk.push(i); 16 } 17 18 return res; 19 } 20 }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步