LeetCode 1944. 队列中可以看到的人数(单调栈)

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

有 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 个人能看到编号为 124 的人。
第 1 个人能看到编号为 2 的人。
第 2 个人能看到编号为 34 的人。
第 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 中所有数 互不相同 。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-visible-people-in-a-queue
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 单调栈,见注释
class Solution {
public:vector<int> canSeePersonsCount(vector<int>& heights) {int n = heights.size();vector<int> ans(n, 0);stack<int> s;for(int i = n-1; i >= 0; i--){bool flag = false;//是否见过比自己矮的while(!s.empty() && heights[i] > heights[s.top()]){s.pop();//后续的人肯定看不见flag = true;ans[i]++;//见过一个比自己矮的,+1,可以看见}if(!flag && i != n-1)ans[i] = 1;//除了最右边的人,至少可以看见1个人else if(flag && !s.empty())ans[i]++;//如果见过比自己矮的人,且栈内还有人(比自己高,能看见)s.push(i);}return ans;}
};

144 ms 82.1 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

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

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

相关文章

yolov2训练_一文看懂YOLO v2

我的CSDN博客&#xff1a;https://blog.csdn.net/litt1e我的公众号&#xff1a;工科宅生活概述新的YOLO版本论文全名叫“YOLO9000: Better, Faster, Stronger”&#xff0c;相较于YOLO主要有两个大方面的改进&#xff1a;第一&#xff0c;作者使用了一系列的方法对原来的YOLO多…

java的foeachr循环_for循环和Dowhile循环的应用

DoWhile循环{public static void main(String[] args) {int i 0;int sum 0;do {sum sum i;i;} while (i < 100);System.out.println(sum);}}{int a 0;while (a<0){System.out.println(a);a;}System.out.println("");do {System.out.println(a);a;}while (…

LeetCode 1945. 字符串转化后的各位数字之和

文章目录1. 题目2. 解题1. 题目 给你一个由小写字母组成的字符串 s &#xff0c;以及一个整数 k 。 首先&#xff0c;用字母在字母表中的位置替换该字母&#xff0c;将 s 转化 为一个整数&#xff08;也就是&#xff0c;‘a’ 用 1 替换&#xff0c;‘b’ 用 2 替换&#xff…

LeetCode 1955. 统计特殊子序列的数目

文章目录1. 题目2. 解题1. 题目 特殊序列 是由 正整数 个 0 &#xff0c;紧接着 正整数 个 1 &#xff0c;最后 正整数 个 2 组成的序列。 比方说&#xff0c;[0,1,2] 和 [0,0,1,1,1,2] 是特殊序列。 相反&#xff0c;[2,1,0] &#xff0c;[1] 和 [0,1,2,0] 就不是特殊序列。…

win7家庭版远程桌面补丁_无需惊慌!微软漏洞数月后再被“预警”打补丁即可防御...

9月7日&#xff0c;火绒接到用户反馈&#xff0c;咨询多家安全友商相继发布的漏洞预警一事。经火绒工程师确认&#xff0c;该漏洞(CVE-2019-0708)早在5月14日就已经被微软披露过&#xff0c;火绒也在第一时间发布了相关漏洞预警&#xff0c;并向火绒用户推送该漏洞补丁。此次多…

LeetCode 1954. 收集足够苹果的最小花园周长(数学)

文章目录1. 题目2. 解题1. 题目 给你一个用无限二维网格表示的花园&#xff0c;每一个 整数坐标处都有一棵苹果树。 整数坐标 (i, j) 处的苹果树有 ∣i∣∣j∣|i| |j|∣i∣∣j∣个苹果。 你将会买下正中心坐标是 (0, 0) 的一块 正方形土地 &#xff0c;且每条边都与两条坐标…

java星座测试需求分析_java十二星座 (快来测试你是什么星座吧)

无聊写个十二星座。。我发现我好像都是无聊的时候学习的。。。package 十二星座;import java.awt.*;import javax.swing.*;import java.awt.event.*;public class 十二星座 {public static void main(String args[]){new Fram();}}class Fram extends JFrame implements Action…

LeetCode 1953. 你可以工作的最大周数

文章目录1. 题目2. 解题1. 题目 给你 n 个项目&#xff0c;编号从 0 到 n - 1 。 同时给你一个整数数组 milestones &#xff0c;其中每个 milestones[i] 表示第 i 个项目中的阶段任务数量。 你可以按下面两个规则参与项目中的工作&#xff1a; 每周&#xff0c;你将会完成 …

vim查找关键字_VIM学习笔记 对话框(Dialog)

查找对话框使用以下命令&#xff0c;将会打开一个查找对话框&#xff1a;:promptfind [string]如果在命令中指定了[string]值&#xff0c;那么就会查找该字符串&#xff1b;如果没有指定[string]值&#xff0c;那么将会查找上次搜索的字符串。替换对话框使用以下命令&#xff0…

LeetCode 1952. 三除数

文章目录1. 题目2. 解题1. 题目 给你一个整数 n 。如果 n 恰好有三个正除数 &#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 如果存在整数 k &#xff0c;满足 n k * m &#xff0c;那么整数 m 就是 n 的一个 除数 。 示例 1&#xff1a; 输入&#xff…

Java充电宝模型设计_继续探讨点赞功能模块设计

继续探讨点赞功能模块设计前几天我们设计了点赞模块的模块&#xff0c;大致思路就是&#xff1a;用户点赞&#xff0c;首先缓存到redis中进行保存&#xff0c;redis中既要保存点赞总数&#xff0c;还要保存点赞记录。然后定时执行redis数据到数据库中。但是&#xff0c;今天在资…

LeetCode 1957. 删除字符使字符串变好

文章目录1. 题目2. 解题1. 题目 一个字符串如果没有 三个连续 相同字符&#xff0c;那么它就是一个 好字符串 。 给你一个字符串 s &#xff0c;请你从 s 删除 最少 的字符&#xff0c;使它变成一个 好字符串 。 请你返回删除后的字符串。题目数据保证答案总是 唯一的 。 示…

广度优先遍历_LeetCode | 广度优先遍历

阅读本文大约需要 4 分钟概述前言429 N 叉树的层次遍历 90.36%102 二叉树的层次遍历 99.76%后记前言不管经济多不好&#xff0c;提高自身硬实力才是关键。本文由一个骚包程序猿zone7撰写&#xff0c;欢迎关注。429 N 叉树的层次遍历 90.36%给定一个 N 叉树&#xff0c;返回其节…

LeetCode 1958. 检查操作是否合法(模拟)

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的 8 x 8 网格 board &#xff0c;其中 board[r][c] 表示游戏棋盘上的格子 (r, c) 。 棋盘上空格用 . 表示&#xff0c;白色格子用 W 表示&#xff0c;黑色格子用 B 表示。 游戏中每次操作步骤为&#xff1a;选择一个空格…

php获取周几,php怎么获得星期几

php怎么获得星期几2021-03-07 15:06:02php获得星期几的方法&#xff1a;首先创建一个PHP示例文件&#xff1b;然后定义一个数组&#xff1b;最后通过“echo "星期".$weekarray[date("w")];”方式获得星期几即可。本文操作环境&#xff1a;Windows7系统、PH…

电脑假死卡的动不了_最近遇到奇怪电脑问题(实战篇)

点击蓝字关注我们话不多扯&#xff0c;说事最近遇到奇怪电脑问题装的是7系统32位开机可以进入系统插着网线开机&#xff0c;就假死拔掉网线开机&#xff0c;正常&#xff0c;然后插上网线依旧正常再带着网线关机&#xff0c;开机后又成假死假死后拔下网线依旧恢复不了必须是不插…

LeetCode 1961. 检查字符串是否为数组前缀

文章目录1. 题目2. 解题1. 题目 给你一个字符串 s 和一个字符串数组 words &#xff0c;请你判断 s 是否为 words 的 前缀字符串 。 字符串 s 要成为 words 的 前缀字符串 &#xff0c;需要满足&#xff1a;s 可以由 words 中的前 k&#xff08;k 为 正数 &#xff09;个字符…

ios UIScrollView 基础属性

转 UIScrollView 原理 在滚动过程当中&#xff0c;其实是在修改原点坐标。当手指触摸后, scroll view会暂时拦截触摸事件,使用一个计时器。假如在计时器到点后没有发生手指移动事件&#xff0c;那么 scroll view 发送 tracking events 到被点击的 subview。假如在计时器到点前发…

LeetCode 1962. 移除石子使总数最小(优先队列)

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 piles &#xff0c;数组 下标从 0 开始 &#xff0c;其中 piles[i] 表示第 i 堆石子中的石子数量。 另给你一个整数 k &#xff0c;请你执行下述操作 恰好 k 次&#xff1a; 选出任一石子堆 piles[i] &#xff0c;并从中 移除…

ubuntu自定义安装里怎么选_中央空调到底应该怎么选?小户型也能安装中央空调?行家说实话了...

▲ 点击蓝字“建通舒适家”&#xff0c;你想知道的空调问题&#xff0c;答案全在这里啦&#xff01;中央空调到底应该怎么选&#xff1f;小户型也能安装中央空调&#xff1f;行家说实话了现在业主装修大多都是对中央控空调一知半解&#xff0c;出现很多种的情况就是&#xff1a…