OJ练习第188题——队列中可以看到的人数

发布时间:2024年01月05日

队列中可以看到的人数

力扣链接:1944. 队列中可以看到的人数

题目描述

在这里插入图片描述

示例

在这里插入图片描述

解题思路(单调栈)

分析图例可以发现,第 0个人可以看到的三个人的身高是严格递增的。如果满足 i<j,此时下标为 jjj 且靠后的人比下标为 i且靠前的人矮,那么下标为 j的人无法被下标 i之前的人看到。根据这个规律,我们可以想到利用单调栈来解决这个问题。从队伍末尾开始,维护一个单调栈,从栈底到栈顶,身高严格递减。
在这里插入图片描述

class Solution {
    public int[] canSeePersonsCount(int[] heights) {
        int n = heights.length;
        Deque<Integer> stack = new ArrayDeque<Integer>();
        int[] res = new int[n];
        for(int i = n - 1; i >= 0; i--) {
            int h = heights[i];
            while(!stack.isEmpty() && stack.peek() < h) {
                stack.pop();
                res[i]++;
            }
            if(!stack.isEmpty()) {
                res[i]++;
            }
            stack.push(h);
        }
        return res;
    }
}

触类旁通

单调栈:OJ练习第101题——柱状图中最大的矩形

文章来源:https://blog.csdn.net/weixin_45662626/article/details/135407331
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。