【力扣每日一题】1944队列中可以看到的人数

目录

题目来源

题目描述

示例

提示:

思路分析

总结

代码实现

java实现

c++实现

得分情况

java

c++

p.s.吐槽一点无足轻重的事情


题目来源

力扣1944队列中可以看到的人数

题目描述

有 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 <= 10^5
  • 1 <= heights[i] <= 10^5
  • heights 中所有数 互不相同 。

思路分析

很明显第i个人能看到的人必须满足的条件有:

  1. 编号比i大;
  2. 身高比第i个人低,或者是右边第一个身高比第i个人高的;
  3. 在这个人和第i个人之间没有比这个人高的人.

总结

设在第i个人A的右边第一个身高高于A的人为B A能看见自己和B之间的严格身高递增序列中的人(包括B)


解题步骤:

  1. 用栈维护一个身高递减序列(从右边往右入栈所以不是递增);
  2. 如果当前身高低于栈顶身高,即比递减序列最小元素小,answer[i] = 1,直接入栈;
  3. 如果当前身高低于栈顶身高,进行出栈操作,直到栈顶元素比当前身高高,同时每次出栈的时候,当前能看见的人数answer[i]都要进行加一操作。

代码实现

java实现

public class Solution {public int[] canSeePersonsCount(int[] heights) {int length = heights.length;int[] answer = new int[length];// 数组模拟栈,保存身高递减序列int[] decreasingHeightStack = new int[length];// 栈顶指针int stackTop = 0;// 最右边的身高压栈decreasingHeightStack[stackTop++] = heights[length - 1];for (int i = length - 2; i >= 0; i--){if (heights[i] < decreasingHeightStack[stackTop - 1]) {// 如果比右边的人矮,只能看见一个人answer[i] = 1;}else {// 如果比右边的人高,出栈递减序列栈里比自己矮的人,这些人都能被看见for (; stackTop > 0; stackTop--){answer[i]++;if (decreasingHeightStack[stackTop - 1] > heights[i]) {break;}}}// 自己入栈decreasingHeightStack[stackTop++] = heights[i];}return answer;}
}

c++实现

class Solution {
public:vector<int> canSeePersonsCount(vector<int>& heights) {int length = heights.size();vector<int> answer(length);// 递减序列栈vector<int> decreasingHeightStack = vector<int>(length);int stackTop = 0;decreasingHeightStack[stackTop++] = heights[length - 1];for (int i = length - 2; i >= 0; i--) {// 如果自己是最矮的直接入栈if (heights[i] < decreasingHeightStack[stackTop - 1]) {answer[i] = 1;}else {// 如果自己当前不是递减序列中最矮的,需要出栈比自己矮的,并且出栈的人都能被看到for (; stackTop > 0; stackTop--) {answer[i]++;if (heights[i] < decreasingHeightStack[stackTop - 1]) {break;}}}// 自己入栈decreasingHeightStack[stackTop++] = heights[i];}return answer;}
};

得分情况

java

c++

p.s.吐槽一点无足轻重的事情

这两次提交之间的区别仅仅只是把用数组模拟栈改成了用vector来实现,时间性能就改善了这么多。。。。。。

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

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

相关文章

jupyter更改默认路径到其它的目录或者到其它的盘 比如D盘

1.打开终端 输入jupyter notebook --generate-config 如下 2.在C:\Users\mb5958\.jupyter路径下 3.用记事本打开它&#xff0c;搜索directory 4.在你想要的路径下新建一个文件夹&#xff0c;如‘D:\jupyterFile’&#xff0c;然后将路径名放在c.NotebookApp.notebook_dir"…

appium自动化问题总结

1、DeprecationWarning: find_element_by_name is deprecated. Please use find_element(byBy.NAME, valuename) instead self.driver.find_element_by_name appium软件查看不到新建session的工具时候&#xff0c;可以下载2020年版本的appim&#xff0c;然后安装下面地址操作配…

leaflet呼吸闪烁效果

leaflet呼吸闪烁效果 1.功能背景 这个效果一把用于点击选中&#xff0c;报警提升效果。 2.功能开发 2.1 marker 这个效果还是很好实现&#xff0c;主要通过计时器设置透明度的组合实现。 function setTargetSelect(e){var i 1var int setInterval(() > {if(!e._map…

从vue小白到高手,从一个内容管理网站开始实战开发第三天,使用Element UI构建页面-登录(一)

上次我们介绍了如何安装Element UI库,这次我们使用Element UI中的组件开始开发我们的页面。 开发之前要先在项目中建立好几个目录,方便我们下面的开发。 一、在项目中创建页面管理目录 1、pages目录(文件夹) 首先在src文件夹下创建一个名为pages的文件夹,该文件夹用来统…

KeyError: ‘mistral‘解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

打开软件游戏提示缺少msvcp140.dll的解决方法,修复缺少140dll文件的方法

一、msvcp140.dll是什么文件&#xff1f; msvcp140.dll是Microsoft Visual C 2015 Redistributable Package的一部分&#xff0c;它是运行许多Windows应用程序所必需的动态链接库文件之一。它包含了许多C类库&#xff0c;这些类库为开发人员提供了丰富的功能和工具&#xff0c…

罗德与施瓦茨FSVA40信号和频谱分析仪

罗德与施瓦茨FSVA40是一款功能信号和频谱分析仪&#xff0c;适用于从事射频系统的开发、生产、安装和服务的用户。FSVA40信号和频谱分析仪系列始终提供最佳的价格和性能组合&#xff0c;无论是根据最新通信标准测试生产中的无线设备&#xff0c;还是测量低相位噪声、高灵敏度和…

均匀与准均匀 B样条算法

B 样条曲线的定义 p ( t ) ∑ i 0 n P i F i , k ( t ) p(t) \sum_{i0}{n} P_i F_{i, k}(t) p(t)i0∑​nPi​Fi,k​(t) 方程中 n 1 n1 n1 个控制点&#xff0c; P i P_i Pi​, i 0 , 1 , ⋯ n i0, 1, \cdots n i0,1,⋯n 要用到 n 1 n1 n1 个 k k k 次 B 样条基函数 …

ChatGPT大升级,文档图像识别领域迎来技术革新

​写在前面ChatGPT迎来重大升级冲击与机遇并存​大模型时代的思考与探索■ 像素级OCR统一模型- UPOCR■ OCR大一统模型- SPTS v3■ 文档识别分析LLM应用 写在最后问卷抽奖 ​写在前面 2023 年 12 月 31 日第十九届中国图象图形学学会青年科学家会议在广州召开&#xff0c;该会…

记一次 .NET 某新能源材料检测系统 崩溃分析

一&#xff1a;背景 1. 讲故事 上周有位朋友找到我&#xff0c;说他的程序经常会偶发性崩溃&#xff0c;一直没找到原因&#xff0c;自己也抓了dump 也没分析出个所以然&#xff0c;让我帮忙看下怎么回事&#xff0c;那既然有 dump&#xff0c;那就开始分析呗。 二&#xff…

【萤火虫系列教程】2/5-Adobe Firefly 文字​生成​图像

文字​生成​图像 登录账号后&#xff0c;在主页点击文字生成图像的【生成】按钮&#xff0c;进入到文字生成图像 查看图像 在文字生成图像页面&#xff0c;可以看到别人生成的图像。 点击某个图像&#xff0c;就可以进入图像详情&#xff0c;可以看到文字描述。 生成图像 我…

tolist()读取Excel列数据,(Excel列数据去重后,重新保存到新的Excel里)

从Excel列数据去重后&#xff0c;重新保存到新的Excel里 import pandas as pd# 读取Excel文件 file r"D:\\pythonXangmu\\quchong\\quchong.xlsx" # 使用原始字符串以避免转义字符 df pd.read_excel(file, sheet_namenameSheet)# 删除重复值 df2 df.drop_duplica…

Vue介绍和基本使用

0 前端的发展史 1.HTML(5)、CSS(3)、JavaScript(ES5、ES6)&#xff1a;编写一个个的页面 -> 给后端(PHP、Python、Go、Java) -> 后端嵌入模板语法 -> 后端渲染完数据 -> 返回数据给前端 -> 在浏览器中查看 2.Ajax的出现 -> 后台发送异步请求&#xff0c;Re…

论Acrel-2000MG微电网能量管理系统在储能行业的应用-安科瑞 蒋静

一、概述: 在新型电力系统中新能源装机容量逐年提高&#xff0c;但是新能源比如光伏发电、风力发电是不稳定的能源&#xff0c;所以要维持电网稳定&#xff0c;促进新能源发电的消纳&#xff0c;储能将成为至关重要的一环&#xff0c;是分布式光伏、风电等新能源消纳以及电网安…

算法专题六:模拟

一.替换所有的问号 替换所有的问号 1.思路一 class Solution { public:string modifyString(string s) {for(int i0;i<s.size();i){if(s[i] ?){for(char j a ; j<z ; j){//1.注意数组越界if((i0 || s[i-1] ! j) && (is.size()-1 || s[i1] ! j)){s[i] j;brea…

【Python学习】Python学习1

目录 【Python学习】Python学习1 1.前言2.Python安装3.PyCharm安装4.PyCharm插件推荐5.参考 文章所属专区 Python学习 1.前言 Python 是一种解释型、面向对象、动态数据类型的高级程序设计语言。Python 由 Guido van Rossum 于 1989 年底发明&#xff0c;第一个公开发行版发…

【C/C++】轻量级跨平台 开源串口库 CSerialPort

文章目录 1、简介2、支持的平台3、已经支持的功能4、Linux下使用5、使用vcpkg安装CSerialPort6、交叉编译7、效果图8、基于CSerialPort的应用8.1、CommMaster通信大师8.2、CommLite串口调试器 1、简介 Qt 的QSerialPort 已经是跨平台的解决方案&#xff0c;但Qt开发后端需要 Q…

[C#]C# OpenVINO部署yolov8图像分类模型

【官方框架地址】 https://github.com/ultralytics/ultralytics.git 【算法介绍】 YOLOv8 抛弃了前几代模型的 Anchor-Base。 YOLO 是一种基于图像全局信息进行预测的目标检测系统。自 2015 年 Joseph Redmon、Ali Farhadi 等人提出初代模型以来&#xff0c;领域内的研究者们…

【React系列】Hook(二)高级使用

本文来自#React系列教程&#xff1a;https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. Hook高级使用 1.1. useReducer 很多人看到useReducer的第一反应应该是redux的某个替代品&#xff0c;其实并不是…

解锁测试性能瓶颈:深度探讨JMeter分布式性能测试!

在做后端服务器性能测试中&#xff0c;我们会经常听到分布式。但你是否了解分布式呢&#xff1f;今天&#xff0c;我们就来给大家讲讲&#xff0c;在企业实战中&#xff0c;如何使用分布式进行性能测试&#xff0c;实战过程中&#xff0c;又有哪些地方要特别注意&#xff1f; 0…