【力扣每日一题】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.hqwc.cn/news/325087.html

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

相关文章

综合医院信息系统源码,HIS源码,(HIS+LIS+电子病历系统)正版授权,可商用

基层医院云HIS系统源码&#xff0c;二级综合医院信息系统源码&#xff0c;HIS源码&#xff0c;正版授权&#xff0c;可项目使用 一、云HIS系统介绍&#xff1a; 一款满足基层医院各类业务需要的云HIS系统。该系统能帮助基层医院完成日常各类业务&#xff0c;提供病患挂号支持、…

大师学SwiftUI第6章 - 声明式用户界面 Part 1

状态 在上一章&#xff0c;我们介绍了SwiftUI的主要特性&#xff0c;声明式语法。借助SwiftUI&#xff0c;我们可以按希望在屏幕上显示的方式声明视图&#xff0c;余下交由系统来创建所需的代码。但声明式语法不只用于组织视图&#xff0c;还可在应用状态发生变化时更新视图。…

南金研小巧的CAN总线记录仪在冬测中的使用

南金研小巧的CAN总线记录仪在冬测中的使用&#xff1a; 在这里插入图片描述 1.确定需求&#xff1a;在开始使用前&#xff0c;需要明确冬测的具体需求&#xff0c;例如需要记录的CAN总线数据类型、采样率、存储容量等。 2.连接硬件&#xff1a;将小巧的CAN总线记录仪与需要进行…

普中STM32-PZ6806L开发板(有点悲伤的故事续-人灯还未了)

简介 继上篇 普中STM32-PZ6806L开发板(有点悲伤的故事) 说到 关于 普中STM32-PZ6806L开发板的LED流水灯也被烧坏掉了&#xff0c;再也无法玩流水灯, 内心充满了只会流水灯的不甘, 流水灯就是单片机的Hello World&#xff0c;怎么能没有呢&#xff1f; 事情发展 好巧不巧想起最近…

紫光展锐5G扬帆出海 | 欧洲积极拥抱更多5G选择

和我国一样&#xff0c;欧洲不少国家也在2019年进入5G商用元年&#xff1a;英国在2019年5月推出了5G商用服务&#xff0c;该国最大的移动运营商EE(Everything Everywhere)最先商用5G&#xff1b;德国在2019年年中推出5G商用服务&#xff0c;德国电信、沃达丰和 Telefonica是首批…

mysql之数据类型、建表以及约束

目录 一. CRUD 1.1 什么是crud 1.2 select(查询) 1.3 INSERT(新增) 1.4 UPDATE(修改&#xff09; 1.5 DELETE(删除) 二. 函数 2.1 常见函数 2.2 流程控制函数 2.3聚合函数 三. union与union all 3.1 union 3.2 union all 3.3 具体不同 3.4 结论 四、思维导图 一. CRUD 1.1…

Mac Parallels19.1.0 Install CentOS7.9

0、资源准备 # centos7.9镜像一份 链接: https://pan.baidu.com/s/1acIjUnsTGhk_2cYCZLSoGg?pwd6666 提取码: 6666 --来自百度网盘超级会员v7的分享1、打开PD 2、选择镜像进行安装 指定镜像名称 创建 进行密码设置 安装目的地点开后直接点击完成 网络和主机名称 开…

DS|图(连通与生成树)

题目一&#xff1a;DS图 -- 图的连通分量 题目描述&#xff1a; 输入无向图顶点信息和边信息&#xff0c;创建图的邻接矩阵存储结构&#xff0c;计算图的连通分量个数。 输入要求&#xff1a; 测试次数t 每组测试数据格式如下&#xff1a; 第一行&#xff1a;顶点数 顶点…

Html5实用个人博客留言板模板源码

文章目录 1.设计来源1.1 主界面1.2 认识我界面1.3 我的日记界面1.4 我的文章列表界面和文章内容界面1.5 我的留言板界面 2.演示效果和结构及源码2.1 效果演示2.2 目录结构2.3 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151…

30分钟快速搭建并部署一个免费的个人博客

前言 现如今网上有许多完善的博客平台&#xff0c;如博客园、掘金、思否、知乎等。有人会说为什么现在网上有这么多成熟的博客平台&#xff0c;你还要浪费时间搭建一个自己的博客系统呢&#xff1f;首先我相信每一个程序员都会想要拥有一个属于自己的博客系统&#xff0c;其次…

K8S陈述式管理

命令行&#xff1a;kubectl命令行工具 优点&#xff1a;90%以上的场景都可以满足 对资源的增&#xff0c;删&#xff0c;查比较方便&#xff0c;对改不是很友好 缺点&#xff1a; 命令比较冗长&#xff0c;复杂&#xff0c;难记 声明式&#xff1a; K8S当中的yaml文件来实…

MR实战:词频统计

文章目录 一、实战概述二、提出任务三、完成任务&#xff08;一&#xff09;准备数据1、在虚拟机上创建文本文件2、上传文件到HDFS指定目录 &#xff08;二&#xff09;实现步骤1、创建Maven项目2、添加相关依赖3、创建日志属性文件4、创建词频统计映射器类5、创建词频统计归并…