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;
    }

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

相关推荐
wabs6667 小时前
关于贪心算法的一些自我总结【力扣45.跳跃游戏II】【灵感来源:代码随想录】
算法·贪心算法·复盘
2401_876964137 小时前
【湖北专升本】2026湖北专升本真题PDF+备考资料汇总
数据结构·人工智能·经验分享·深度学习·算法·计算机视觉
嗝o゚7 小时前
CANN GE 算子融合——融合算法与调度策略
算法·昇腾·cann·ge
小江的记录本8 小时前
【JVM虚拟机】垃圾回收GC:垃圾回收算法:标记-清除、标记-复制、标记-整理、分代收集(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·算法·安全·面试
不总是9 小时前
[2026最新] Windows 免安装版 MySQL 8 详细安装配置教程(ZIP 压缩包版)
数据库·windows·mysql
Ulyanov9 小时前
用声明式语法重新定义Python桌面UI:QML+PySide6现代开发入门(一)
开发语言·python·算法·ui·系统仿真·雷达电子对抗仿真
数据科学小丫9 小时前
特征工程处理
人工智能·算法·机器学习
z落落9 小时前
C#参数区别
java·算法·c#
2401_8769641310 小时前
27考研余炳森概率论|喻老李良2027资料网课
windows·git·考研·svn·eclipse·github·概率论
介一安全10 小时前
【漏洞学习】PHP+Windows环境通用文件上传漏洞深度剖析
windows·web安全·php·文件上传·安全性测试