[LeetCode] 1944. Number of Visible People in a Queue_Hard tag: stack
2023-10-11 05:27 Johnson_强生仔仔 阅读(10) 评论(0) 编辑 收藏 举报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.
利用 strict decreasing stack来得到第一个左边比nums[i] 大的index,count所有i与那个index之间的num的个数
考虑利用Data structure - Stack 小结及leetcode相关题目 里面的模板
注意因为是从左往右看,所以我们reverse 来traverse。
T: O(n), S: O(n)
class Solution: def canSeePersonsCount(self, heights: List[int]) -> List[int]: n = len(heights) ans = [0] * n stack = [] # decrease stack for i in range(n - 1, -1, -1): while stack and stack[-1] <= heights[i]: stack.pop() ans[i] += 1 # count num that <= heights[i] if stack: ans[i] += 1 # plus the first num that > heights[i] if exists stack.append(heights[i]) return ans
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架