leetcode1944. 队列中可以看到的人数

Problem: 1944. 队列中可以看到的人数

文章目录

  • 题目
  • 解题方法
  • 复杂度
  • Code

题目

有 n 个人排成一个队列,从左到右 编号为 0 到 n - 1 。给你以一个整数数组 heights ,每个整数 互不相同,heights[i] 表示第 i 个人的高度。
一个人能 看到 他右边另一个人的条件是这两人之间的所有人都比他们两人 矮 。更正式的,第 i 个人能看到第 j 个人的条件是 i < j 且 min(heights[i], heights[j]) > max(heights[i+1], heights[i+2], …, heights[j-1]) 。
请你返回一个长度为 n 的数组 answer ,其中 answer[i] 是第 i 个人在他右侧队列中能 看到 的 人数 。

示例 1:
在这里插入图片描述

输入:heights = [10,6,8,5,11,9] 输出:[3,1,2,1,1,0] 解释: 第 0 个人能看到编号为 1 ,2 和
4 的人。 第 1 个人能看到编号为 2 的人。 第 2 个人能看到编号为 3 和 4 的人。 第 3 个人能看到编号为 4 的人。 第 4
个人能看到编号为 5 的人。 第 5 个人谁也看不到因为他右边没人。 示例 2:

输入:heights = [5,1,2,3,10] 输出:[4,1,1,1,0]

提示:

n == heights.length 1 <= n <= 105 1 <= heights[i] <= 105 heights 中所有数
互不相同

解题方法

使用单调栈,因为题目要求是i往右边看,所以我们从右往左遍历,使用一个单调递减的栈去保存已经遍历过的数字。

对于当前元素,如果栈顶元素小于当前元素,说明栈顶元素肯定能被看见,答案加1,并且弹出他。这里我们为什么要弹出他呢?因为这个元素比当前元素小,所以当前元素左边的数不会看到他,所以要弹出

在弹出的操作结束后,如果这个栈不为空的,说明右边存在一个元素大于等于当前元素,这个元素也可以被看见,所以我们答案加1
最终我们添加当前元素到栈中

复杂度

时间复杂度:

只遍历一遍,所以是 O ( n ) O(n) O(n)

空间复杂度:

只用stack存储元素,极端情况下会存储n个数字,所以是 O ( n ) O(n) O(n)

Code

class Solution:def canSeePersonsCount(self, heights: List[int]) -> List[int]:stack = []ans = [0] * len(heights)for i in range(len(heights)-1,-1,-1):while stack and stack[-1]<heights[i]:stack.pop()ans[i]+=1if stack:ans[i]+=1stack.append(heights[i])return ans

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/597932.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM之对象创建

对象创建的流程 1.类加载检查 虚拟机遇到一条new指令时&#xff0c;首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用&#xff0c;并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有&#xff0c;那必须先执行相应的类加载过程。new指令对…

含科研思考六、关于【图神经网络】的一些要点 | 图神经网络节点表示学习研究:选题参考、问题探讨 | 图神经网络多模态 | 异构图神经网络

我们抬头便看到星光,星星却穿越了万年. 🎯作者主页: 追光者♂🔥 🌸个人简介: 📝[1] CSDN 博客专家📝 🏆[2] 人工智能领域优质创作者🏆 🌟[3] 2023年城市之星领跑者TOP1(哈尔滨)🌿 🌿[4] 2022年度博客之星人工智能领域TOP4🌟 🏅

Oracle/Myql批量操作

前言&#xff1a;在oracle中使用insert into values (),(),()多种方式都不能成功,记录正确的批量方法 注意&#xff1a;oracle有自己实现批量的方法&#xff0c;mysql适用的&#xff0c;oracle不一定适用 <insert id"insertTaskImportOpen" parameterType"l…

C++完成Connect连接数据的接口和测试

关于准备工作&#xff0c;请看上篇文章https://blog.csdn.net/wjl990316fddwjl/article/details/135357755 1、在LXMysql.h里面创建Connect连接函数 /数据库连接&#xff0c;先不考虑线程安全//unsigned short port 65535 //flag可以设置支持多条语句 默认为0&#xff1b;por…

Docker-Compose部署Redis(v7.2)主从模式

文章目录 一、前提准备1. redis配置文件2. 下载redis镜像3. 文件夹结构 二、docker-compose三、主从配置1.主节点配置文件 环境 docker desktop for windows 4.23.0redis 7.2 一、前提准备 1. redis配置文件 因为Redis 7.2 docker镜像里面没有配置文件&#xff0c;所以需要…

Color Control

设计一个优秀的用户界面是一项艰巨的任务。特别是如果你想改变UI的颜色,调整所有元素可能需要花费大量时间。Color Control可以帮助你!在检查器中以可视化的方式将你的项目颜色定义为资源。Color Control为你提供了组件,当你编辑它们时,它们会自动更新你的UI元素。 颜色控制…

Oracle-游标

简介 游标即cursor&#xff0c;是一种用于遍历结果集的数据类型。它是一个指向结果集的指针&#xff0c;可以用于遍历结果集中的每一行数据&#xff0c;但是一次只能指向一行。游标通常用于存储过程和函数中&#xff0c;以便在处理结果集时能够逐行处理数据。 语法 /* 游标:(…

vue3中vite使用sass

引用&#xff1a;https://blog.csdn.net/weiliang_66/article/details/132469597 npm install sass -d配置vite.config.js: css: {preprocessorOptions: {scss: {additionalData:import "/assets/styles/main.scss";}}}创建对应的 main.sass

花了一小时,拿python手搓了一个考研背单词软件

听说没有好用的电脑端背单词软件&#xff1f;只好麻烦一下&#xff0c;花了一小时&#xff0c;拿python手搓了一个考研背单词软件。 代码已经开源在我的github上&#xff0c;欢迎大家STAR&#xff01; 其中&#xff0c;数据是存放在sqlite中&#xff0c;形近词跳转是根据jaro …

新的centos7.9安装docker版本的jenkins2.436.1最新版本-后端项目发布(四)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; https://gitee.com/nbacheng/n…

遥感影像-语义分割数据集:2021年昇腾杯复赛数据集详细介绍及训练样本处理流程

原始数据集详情 简介&#xff1a;细粒度语义分割赛道依据现有的遥感地物分类要求&#xff0c; 结合现有的地物分类实际需求&#xff0c;参照地理国情监测、 “三调”等既有地物分类标准&#xff0c;依据遥感地物“所见即所得”原则&#xff0c; 设计地物要素分类体系&#xff…

2024最新Java基础面试题大全(三)

文章目录 1、Spring 两大模块是什么&#xff0c;有什么作用2.1、IOC2.2、AOP 2、Spring 中常用注解、与其含义作用是什么2.1、声明bean2.2、注入bean2.3、配置类的相关注解2.4、单元测试注解2.5、时间转换注解2.6、SpringMVC 注解2.7、AOP 切面相关注解 3、SpringBean 的生命周…

Excel技巧之【如何修改密码】

我们知道&#xff0c;Excel可以设置多种密码来保护文件&#xff0c;那想要修改密码&#xff0c;要如何操作呢&#xff1f;下面小编来分享一下Excel常用的3种密码的修改方法&#xff0c;一起来看看吧&#xff01; 1. “打开密码” 想要修改Excel表格的“打开密码”&#xff0c…

scratch给数据清单排序 2023年12月中国电子学会图形化编程 少儿编程 scratch编程等级考试四级真题和答案解析

目录 scratch给数据清单排序 一、题目要求 1、准备工作 2、功能实现 二、案例分析

Web前端篇——ElementUI之el-scrollbar + el-backtop + el-timeline实现时间轴触底刷新和一键返回页面顶部

ElementUI之el-scrollbar el-backtop el-timeline实现时间轴触底刷新和一键返回页面顶部。 背景&#xff1a;ElementUI的版本&#xff08;vue.global.js 3.2.36&#xff0c; index.css 2.4.4&#xff0c; index.full.js 2.4.4&#xff09; 废话不多说&#xff0c;先看动…

骑砍战团MOD开发(31)-游戏AI控制

一.骑砍单机模式下AI控制 骑砍战团中野外战斗,训练场中小兵和地方小兵的行为统称为场景AI. 骑砍大地图中敌军追踪和遭遇追击统称为大地图AI. 二.骑砍场景AI 骑砍引擎通过header_mission_templates,py定制AI常量控制小兵位置,动作和朝向.可实现自定义阵型和攻击动作。 # Agen…

双指针|11.盛最多水的容器

11.盛最多水的容器 **题目&#xff1a;**给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 题…

VSCode远程开发配置和SSH免密登录

目录 概要远程开发插件安装开始连接SSH免密登录开发环境配置 概要 现在很多公司都是直接远程到服务器上写代码&#xff0c;使用远程开发&#xff0c;可以在与生产环境相同的环境中开发、测试和部署代码&#xff0c;减少因环境不同而导致的问题。本文将详细介绍如何通过VSCode连…

帕金森病是否会影响患者的寿命?

帕金森病是一种慢性神经系统疾病&#xff0c;主要影响患者的运动能力&#xff0c;包括肌肉僵硬、震颤和运动迟缓等。关于帕金森病是否会影响患者的寿命&#xff0c;这是一个复杂的问题&#xff0c;需要从多个角度进行分析。 首先&#xff0c;帕金森病本身并不会直接导致患者死…

MS713/MS713T:CMOS 低压、4Ω四路单刀单掷开关,替代ADG713

产品简述 MS713/MS713T 是一款单芯片 CMOS 4 路可选择开关&#xff0c;具有低 功耗、高开关速度、低导通阻抗、低漏电和高带宽特性。其工作 电压范围是 1.8V 到 5.5V &#xff0c;可以广泛应用在电池供电仪器仪表、新 一代的模数转换和数模转换系统中。其高带宽特性可用在 …