LeetCode每日一题 | 1944. 队列中可以看到的人数

队列中可以看到的人数

题目描述

原题链接

n 个人排成一个队列,从左到右 编号为 0n - 1 。给你以一个整数数组 heights ,每个整数 互不相同heights[i] 表示第 i 个人的高度。

一个人能 看到 他右边另一个人的条件是这两人之间的所有人都比他们两人 。更正式的,第 i 个人能看到第 j 个人的条件是 i < jmin(heights[i], heights[j]) > max(heights[i+1], heights[i+2], ..., heights[j-1])

请你返回一个长度为 n 的数组 answer ,其中 answer[i] 是第 i 个人在他右侧队列中能 看到人数

问题分析

从左往右看,高的人会把矮的人挡住,只能看到右边呈现一个单调递增的序列,因此考虑使用单调栈求解该问题。

假设i < j,则i看到景象包含了j所看到的景象(若j挡住了后面所有的人,则信息蕴含在j本身)。因此,从子问题求解的角度分析,单调栈求解该问题应该从右往左进行遍历。

记遍历过程中,当前要研究的对象为i,其对应的高度为h。单调栈此时维持的是i右边所可能看到的对象(单调递增的序列)。统计单调栈中比i矮的人数(i能看到的人数)并弹出栈,因为在i前面的人看不到这些人,会被i挡住。

最后,判断此时栈是否为空,若不为空,要再加上i所能看到的最后一个人,即第一个比i要高的人。然后,将i压入栈中。

程序代码(Golang 版本)

func canSeePersonsCount(heights []int) []int {
   
    n := len(heights)
    res := make([]int, n)
    stk := make([]int, 0)
    
    for i := n - 1; i >= 0; i-- {
   
        h := heights[i]
        for len(stk) > 0 && stk[len(stk) - 1] <= h {
   
            stk = stk[:len(stk)-1]
            res[i]++
        }
        if len(stk) > 0 {
   
            res[i]++;
        }
        stk = append(stk, h)
    }
    return res
}

相关推荐

  1. LeetCode每日 | 1944. 队列可以看到人数

    2024-01-06 07:42:03       41 阅读
  2. 1944. 队列可以看到人数

    2024-01-06 07:42:03       38 阅读
  3. LC 1944. 队列可以看到人数

    2024-01-06 07:42:03       42 阅读
  4. 2024.1.5力扣每日——队列可以看到人数

    2024-01-06 07:42:03       39 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-06 07:42:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-06 07:42:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-06 07:42:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-06 07:42:03       18 阅读

热门阅读

  1. 1.2 C#基础

    2024-01-06 07:42:03       38 阅读
  2. PHP篇——html+php实现表单提交的一个简单例子

    2024-01-06 07:42:03       41 阅读
  3. Spring Boot 和 Spring Framework 的区别

    2024-01-06 07:42:03       48 阅读
  4. Spring Boot 生产就绪中文文档-下

    2024-01-06 07:42:03       30 阅读
  5. TensorFlow的详细介绍

    2024-01-06 07:42:03       33 阅读
  6. Android设备sdcard/tf卡不识别在电脑上可以

    2024-01-06 07:42:03       39 阅读
  7. 记一次 easyswoole 热重载失效复盘 grpc扩展惹的祸

    2024-01-06 07:42:03       48 阅读
  8. 5.3 Android BCC环境搭建(eadb版 下)

    2024-01-06 07:42:03       35 阅读
  9. 新手深入PyTorch中RNN、LSTM和GRU使用和理解

    2024-01-06 07:42:03       30 阅读
  10. Spring Boot 和 Spring 有什么区别

    2024-01-06 07:42:03       42 阅读