当前位置: 首页 > news >正文

算法随笔_58: 队列中可以看到的人数

上一篇:算法随笔_57 : 游戏中弱角色的数量-CSDN博客

=====

题目描述如下:

有 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 个人谁也看不到因为他右边没人。

=====

算法思路:

我们先设结果数组为res。索引-1,-2分别表示倒数第一个,倒数第二个元素。

我们从右往左观察一下原数组:

1. 由于heights[-1]右侧没有人,所以res[-1]等于0。

2. 紧挨着的两个人,heights[i]肯定能看到heights[i+1],所以肯定res[i]>=1,除了res[-1]。

3. heights[i]如果想看到heights[i+2],heights[i+3]等,需要heights[i] > heights[i+1] < heights[i+2] < heights[i+3].....。

此时我们应该就发现了规律,我们可以维护一个栈结构来计算出res。我们设数组stck为这个栈。初始值为stck=[heights[-1]]。

算法如下:

从右往左枚举原数组。只要heights[i]大于栈顶元素stck[-1],就弹出stck[-1],表示元素i 可以看到被弹出的这个元素。循环此判断,直到heights[i]小于stck[-1],我们就把heights[i]放入stck。

对于单调栈来说,每个元素最多入栈和出栈各一次,所以时间复杂度为O(n)。下面是代码实现:

class Solution(object):def canSeePersonsCount(self, heights):""":type heights: List[int]:rtype: List[int]"""h_len=len(heights)stck=[heights[-1]]res=[0]*h_lenfor i in range(h_len-2,-1,-1):cnt=0while stck and heights[i] > stck[-1]:stck.pop()cnt+=1res[i]=cnt+1 if stck else cntstck.append(heights[i])return res

关键词: 单调栈

相关文章:

算法随笔_58: 队列中可以看到的人数

上一篇:算法随笔_57 : 游戏中弱角色的数量-CSDN博客 题目描述如下: 有 n 个人排成一个队列&#xff0c;从左到右 编号为 0 到 n - 1 。给你以一个整数数组 heights &#xff0c;每个整数 互不相同&#xff0c;heights[i] 表示第 i 个人的高度。 一个人能 看到 他右边另一个人…...

创建React项目的三个方式

创建React项目 创建一个React项目非常简单&#xff0c;通常有几种方法可以进行&#xff0c;下面是最常见的几种方法&#xff1a; 1. 使用 create-react-app (已经不被推荐了) create-react-app 是一个官方的脚手架工具&#xff0c;用于快速创建 React 项目。它会为你配置好很…...

QT闲记-工具栏

工具栏通常用来放置常用的操作按钮,如QPushButton,QAction等。可以放置在顶部,底部,左侧,右侧,并且支持拖曳,浮动。 1、创建工具栏 通常通过QMainWindow 提供的addToolBar()来创建,它跟菜单栏一样,如果需要工具栏,一般情况下,我们设置这个类的基类为QMainWindow。 …...

为什么继电器要加一个反向并联一个二极管

1 动感就是电流不突变 2 为什么有的继电器上面要反向并联一个二极管和电阻 1 并联二极管是为消除掉动感产生的高压 2 加上二极管是为了让继电器更快的断开&#xff08;二极管选型的工作电流要大于动感电流&#xff0c;开关要够快&#xff09; 3 公式&#xff1a;二极管压降0…...

【Leetcode 每日一题 - 扩展】1512. 好数对的数目

问题背景 给你一个整数数组 n u m s nums nums。 如果一组数字 ( i , j ) (i,j) (i,j) 满足 n u m s [ i ] n u m s [ j ] nums[i] nums[j] nums[i]nums[j] 且 i < j i < j i<j&#xff0c;就可以认为这是一组 好数对 。 返回好数对的数目。 数据约束 1 ≤ n …...

vue3 采用xlsx库实现本地上传excel文件,前端解析为Json数据

需求&#xff1a;本地上传excel 文件&#xff0c;但需要对excel 文件的内容进行解析&#xff0c;然后展示出来 1. 安装依赖 首先&#xff0c;确保安装了 xlsx 库&#xff1a; bash复制 npm install xlsx 2. 创建 Vue 组件 创建一个 Vue 组件&#xff08;如 ExcelUpload.v…...

计算机视觉:经典数据格式(VOC、YOLO、COCO)解析与转换(附代码)

第一章&#xff1a;计算机视觉中图像的基础认知 第二章&#xff1a;计算机视觉&#xff1a;卷积神经网络(CNN)基本概念(一) 第三章&#xff1a;计算机视觉&#xff1a;卷积神经网络(CNN)基本概念(二) 第四章&#xff1a;搭建一个经典的LeNet5神经网络(附代码) 第五章&#xff1…...

FPGA DSP:Vivado 中带有 DDS 的 FIR 滤波器

本文使用 DDS 生成三个信号&#xff0c;并在 Vivado 中实现低通滤波器。低通滤波器将滤除相关信号。 介绍 用DDS生成三个信号&#xff0c;并在Vivado中实现低通滤波器。低通滤波器将滤除较快的信号。 本文分为几个主要部分&#xff1a; 信号生成&#xff1a;展示如何使用DDS&am…...

记录此刻:历时两月,初步实现基于FPGA的NVMe SSD固态硬盘存储控制器设计!

背景 为满足实验室横向项目需求&#xff0c;在2024年12月中下旬导师提出基于FPGA的NVMe SSD控制器研发项目。项目核心目标为&#xff1a;通过PCIe 3.0 x4接口实现单盘3000MB/s的持续读取速率。 实现过程 调研 花了半个月的时间查阅了一些使用FPGA实现NVME SSD控制器的论文、…...

【计算机网络】OSI模型、TCP/IP模型、路由器、集线器、交换机

一、计算机网络分层结构 计算机网络分层结构 指将计算机网络的功能划分为多个层次&#xff0c;每个层次都有其特定的功能和协议&#xff0c;并且层次之间通过接口进行通信。 分层设计的优势&#xff1a; 模块化&#xff1a;各层独立发展&#xff08;如IPv4→IPv6&#xff0c…...

正点原子[第三期]Arm(iMX6U)Linux系统移植和根文件系统构建-5.3 xxx_defconfig过程

前言&#xff1a; 本文是根据哔哩哔哩网站上“arm(iMX6U)Linux系统移植和根文件系统构键篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。 引用&#xff1a; …...

250223-Linux/MacOS如何跳过Miniconda的条款阅读,直接安装Miniconda

你可以通过将 -b 参数传递给 Miniconda 的安装脚本&#xff0c;来跳过条款阅读并自动同意许可条款。这样安装会自动进行到下一步的选择项。下面是具体的安装命令&#xff1a; bash Miniconda3-latest-Linux-x86_64.sh -b这里的 -b 代表“批量模式”&#xff08;batch mode&…...

点云的几何特征

点云的几何特征是基于一个点周围的邻域对该点周围几何形状的描述。例如&#xff0c;位于墙面上的一个点将具有较高的平面度planarity。 基于局部点云的特征值 λ1、λ2 和 λ3 以及特征向量 e1、e2 和e3计算得到的一系列几何特征&#xff0c;这些特征用于描述点云中点的局部几…...

月之暗面新发布: MUON 在 LLM 训练中的可扩展性

MUON 在 LLM 训练中的可扩展性 摘要 最近&#xff0c;基于矩阵正交化的 Muon 优化器&#xff08;K. Jordan 等人&#xff0c;2024 年&#xff09;在训练小型语言模型方面表现出色&#xff0c;但其在更大规模模型上的可扩展性尚未得到验证。我们确定了 Muon 放大的两个关键技术…...

10.Docker 仓库管理

Docker 仓库管理 Docker 仓库管理 Docker 仓库管理 Docker 仓库&#xff0c;类似于 yum 仓库&#xff0c;是用来保存镜像的仓库。为了方便的管理和使用 docker 镜像,可以将镜像集中保存至 Docker 仓库中&#xff0c;将制作好的镜像 push 到仓库集中保存&#xff0c;在需要镜像…...

Deepseek存算分离安全部署手册

Deepseek大火后&#xff0c;很多文章教大家部署Dfiy和ollamadeepseek&#xff0c;但是大部分都忽略了数据安全问题&#xff0c;本文重点介绍Deepseek存算分裂安全架设&#xff0c;GPU云主机只负责计算、CPU本地主机负责数据存储&#xff0c;确保数据不上云&#xff0c;保证私有…...

【Redis原理】底层数据结构 五种数据类型

文章目录 动态字符串SDS(simple dynamic string )SDS结构定义SDS动态扩容 IntSetIntSet 结构定义IntSet的升级 DictDict结构定义Dict的扩容Dict的收缩Dict 的rehash ZipListZipListEntryencoding 编码字符串整数 ZipList的连锁更新问题 QuickListQuickList源码 SkipListRedisOb…...

Java——抽象类

在Java中&#xff0c;抽象类&#xff08;Abstract Class&#xff09; 是一种特殊的类&#xff0c;用于定义部分实现的类结构&#xff0c;同时允许子类提供具体的实现。抽象类通常用于定义通用的行为或属性&#xff0c;而将具体的实现细节留给子类。 1. 抽象类的定义 语法&…...

DeepSeek在初创企业、教育和数字营销领域应用思考

如今&#xff0c;像 DeepSeek 这样的人工智能工具正在改变企业的运营方式&#xff0c;优化流程并显著提高生产力。通过重复任务的自动化、大量数据的分析以及内容创建效率的提高&#xff0c;组织正在寻找新的竞争和卓越方式。本文介绍了 DeepSeek 如何用于提高三个关键领域的生…...

java开发——为什么要使用动态代理?

举个例子&#xff1a;假如有一个杀手专杀男的&#xff0c;不杀女的。代码如下&#xff1a; public interface Killer {void kill(String name, String sex);void watch(String name); }public class ManKiller implements Killer {Overridepublic void kill(String name, Stri…...

在Rockchip RK3288上折腾Chrome硬件加速:从内核RGA配置到libmali版本匹配的完整踩坑记录

在Rockchip RK3288上实现Chrome硬件加速的深度实践指南 当我们在嵌入式Linux系统中尝试为Chrome浏览器启用GPU硬件加速时&#xff0c;往往会遇到一系列复杂的底层兼容性问题。RK3288作为一款广泛使用的嵌入式处理器&#xff0c;其Mali-T76x GPU的性能潜力巨大&#xff0c;但需要…...

Jlink V9固件修复踩坑全记录:从‘不亮灯’到成功联机KEIL

Jlink V9固件修复实战手记&#xff1a;从硬件诊断到软件重生的完整历程 作为一名嵌入式开发者&#xff0c;Jlink调试器突然罢工的经历想必不少人都有过。那天早晨&#xff0c;当我像往常一样将Jlink V9插入电脑准备调试STM32项目时&#xff0c;熟悉的绿色指示灯没有亮起&#…...

Spring Cloud Gateway 踩坑实录:升级到2020+版本后,lb://服务名路由503?一个依赖搞定

Spring Cloud Gateway 2020版本升级指南&#xff1a;解决lb://服务名路由503问题 最近在将Spring Cloud项目从Hoxton升级到2020.0.x及以上版本时&#xff0c;不少开发者遇到了一个奇怪的问题&#xff1a;原本运行良好的Gateway路由配置突然失效&#xff0c;特别是使用lb://服务…...

告别复制粘贴!手把手教你理解STM32F103C6T6点灯代码里的‘*(unsigned int *)0x4001100C’到底在干什么

从机器码到电子流动&#xff1a;解码STM32寄存器操作背后的硬件语言 当你第一次看到*(unsigned int *)0x4001100C & ~(1<<13);这样的代码时&#xff0c;是否感觉像在阅读外星文字&#xff1f;这串看似随机的数字和符号组合&#xff0c;实际上是连接软件世界与硬件物理…...

怎样快速安装TrollStore:3分钟掌握TrollInstallerX完整教程

怎样快速安装TrollStore&#xff1a;3分钟掌握TrollInstallerX完整教程 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX 想要在iOS设备上安装TrollStore却不知从何入手&a…...

内容优化:让信息更清晰、更有价值

什么是内容优化&#xff1f;我们每天都会接触大量文字、视频、图片&#xff0c;但并不是所有内容都能让人看懂、记住或产生共鸣。内容优化&#xff0c;就是把原本杂乱、模糊或冗长的信息&#xff0c;调整得更清晰、更贴合读者需求的过程。它不是简单地删减字数&#xff0c;也不…...

如何用DDrawCompat让Windows 10/11完美运行经典老游戏:终极兼容性修复指南

如何用DDrawCompat让Windows 10/11完美运行经典老游戏&#xff1a;终极兼容性修复指南 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com/g…...

小白必看!零基础 SRC 漏洞挖掘完整指南:该学什么,如何入门?

零基础入门SRC漏洞挖掘&#xff08;干货版&#xff09;&#xff1a;该学什么&#xff1f;怎么学&#xff1f; 摘要&#xff1a;很多零基础小白想入门SRC漏洞挖掘&#xff0c;却陷入“不知道学什么、从哪开始学”的误区&#xff0c;要么盲目跟风学复杂工具&#xff0c;要么跳过…...

8大主流网盘直链下载助手:免费获取真实下载链接的完整指南

8大主流网盘直链下载助手&#xff1a;免费获取真实下载链接的完整指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / …...

告别混乱!在uni-app中优雅管理推送消息与角标:一个封装好的Push工具类详解

告别混乱&#xff01;在uni-app中优雅管理推送消息与角标&#xff1a;一个封装好的Push工具类详解 在移动应用开发中&#xff0c;推送消息和角标管理是提升用户体验的关键功能&#xff0c;但往往也是最容易陷入混乱的领域。当应用规模扩大、业务逻辑复杂时&#xff0c;零散的推…...