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

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

相关推荐
June`1 小时前
专题二:二叉树的深度搜索(二叉树剪枝)
c++·算法·深度优先·剪枝
好吃的肘子2 小时前
Elasticsearch架构原理
开发语言·算法·elasticsearch·架构·jenkins
胡耀超2 小时前
霍夫圆变换全面解析(OpenCV)
人工智能·python·opencv·算法·计算机视觉·数据挖掘·数据安全
软行3 小时前
LeetCode 每日一题 3341. 到达最后一个房间的最少时间 I + II
数据结构·c++·算法·leetcode·职场和发展
nlog3n3 小时前
Go语言交替打印问题及多种实现方法
开发语言·算法·golang
How_doyou_do3 小时前
备战菊厂笔试4
python·算法·leetcode
朱剑君3 小时前
第九天——贪心算法——非递减数组
算法·贪心算法
Wnq100723 小时前
工业场景轮式巡检机器人纯视觉识别导航的优势剖析与前景展望
人工智能·算法·计算机视觉·激光雷达·视觉导航·人形机器人·巡检机器人
天上路人5 小时前
AI神经网络降噪算法在语音通话产品中的应用优势与前景分析
深度学习·神经网络·算法·硬件架构·音视频·实时音视频
好吃的肘子5 小时前
MongoDB 应用实战
大数据·开发语言·数据库·算法·mongodb·全文检索