2024.1.5力扣每日一题——队列中可以看到的人数

2024.1.5

      • 题目来源
      • 我的题解
        • [方法一 链表+暴力](#方法一 链表+暴力)
        • [方法二 单调栈](#方法二 单调栈)

题目来源

力扣每日一题;题序:1944

我的题解

啊啊啊!!!看到题的瞬间就想到了单调栈,但是结果......方向考虑反了

方法一 链表+暴力

分析可知,当前位置能看见的是遇见右边比当前位置更高的之前的所有的一个递增序列。

计算每个位置右侧满足的递增序列的长度

注:该方法无法通过时间限制。
时间复杂度 :O( n 2 n^2 n2)
空间复杂度:O(n)

java 复制代码
public int[] canSeePersonsCount(int[] heights) {
        LinkedList<Integer> list=new LinkedList<>();
        int n=heights.length;
        int[] res=new int[n];
        for(int i=0;i<n-1;i++){
            int j=i+1;
            for(;j<n;j++){
                if(heights[j]>heights[i]){
                    res[i]=list.size()+1;
                    break;
                }
                if(!list.isEmpty()&&list.getFirst()>heights[j]){
                    continue;
                }
                list.addLast(heights[j]);
            }
            if(j==n){
                res[i]=list.size();
            }
            list.clear();
        }
        return res;
    }
方法二 单调栈

分析图例可以发现,第 0个人可以看到的三个人的身高是严格递增的。通过分析是可以验证这个规律,如果满足 i<j,此时下标为 j 且靠后的人比下标为 i且靠前的人矮,那么下标为 j 的人无法被下标 i之前的人看到。根据这个规律,可以想到利用单调栈来解决这个问题。从队伍末尾开始,维护一个单调栈,从栈底到栈顶,身高严格递减。
时间复杂度 :O(n)
空间复杂度:O(n)

java 复制代码
public int[] canSeePersonsCount(int[] heights) {
        Deque<Integer> stack=new LinkedList<>();
        int n=heights.length;
        int[] res=new int[n];
        //从右到左维护单调减栈
        for(int i=n-1;i>=0;i--){
           int cur=heights[i];
           while(!stack.isEmpty()&&stack.peek()<cur){
               stack.pop();
               res[i]++;
           }
           if(!stack.isEmpty()){
               res[i]++;
           }
           stack.push(cur);
        }
        return res;
    }

有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~

相关推荐
KaMeidebaby13 小时前
卡梅德生物技术快报|纯化重组蛋白实操详解
人工智能·python·tcp/ip·算法·机器学习
caimouse13 小时前
Reactos 第 5 章 进程与线程 — 5.8 Windows 的 APC 机制
c语言·windows
PHP隔壁老王邻居14 小时前
windows菜单搜索栏无法显示历史记录或者无法使用修复方法
windows
手写码匠14 小时前
从零实现 Prompt 工程引擎:结构化提示、自动优化与多轮自省体系
人工智能·深度学习·算法·aigc
道一2314 小时前
Windows系统查看端口占用进程的3种实用方法
windows·笔记
半条-咸鱼14 小时前
【INACCESSIBLE_BOOT_DEVICE】安装 Config Tool 后 Windows 蓝屏,最终通过 VMware 虚拟机解决
windows·stm32·vmware·芯片
无限码力14 小时前
阿里算法岗 0530笔试真题 - 多约束条件下的元素匹配统计
算法·阿里笔试真题·阿里机试真题·阿里算法岗笔试
lqqjuly14 小时前
MLA — 多头潜在注意力深度解析
深度学习·神经网络·算法
吴可可12315 小时前
SolidWorks草图转三维DWG技巧
算法
redaijufeng15 小时前
C++雾中风景7:闭包
c++·算法·风景