练习题 百亿富翁

题目

题目描述

这天小明买彩票中了百亿奖金,兴奋的他决定买下蓝桥公司旁的一排连续的楼房。

已知这排楼房一共有 N 栋,编号分别为 1∼N,第 i 栋的高度为 hi​。

好奇的小明想知道对于每栋楼,左边第一个比它高的楼房是哪个,右边第一个比它高的楼房是哪个(若不存在则输出 −1−1)。但由于楼房数量太多,小明无法用肉眼直接得到答案,于是他花了 11 个亿来请你帮他解决问题,你不会拒绝的对吧?

输入描述

第 11 行输入一个整数 N,表示楼房的数量。

第 22 行输入 N 个整数(相邻整数用空格隔开),分别为 h1​,h2​,...,hN​,表示楼房的高度。

1≤N≤7×10^5,1≤hi​≤10^9。

输出描述

输出共两行。

第一行输出 N 个整数,表示每栋楼左边第一栋比自己高的楼的编号。

第二行输出 N 个整数,表示每栋楼右边第一栋比自己高的楼的编号。

输入输出样例

示例 1

输入

5
3 1 2 5 4 

输出

-1 1 1 -1 4
4 3 4 -1 -1

运行限制

  • 最大运行时间:2s
  • 最大运行内存: 256M
提交代码
//百亿富翁//编号从1开始
//左侧第一个比自己高的楼房的编号
//右侧第一个比自己搞的楼房的编号
//单调栈
//单调栈存楼房下标 
//找上一个或下一个更大的楼房高度 
//没有则为-1#include<iostream>
#include<vector> 
#include<stack>
#include<algorithm>
using namespace std;int N;//楼房数量
vector<int> heights;//各楼房高度
vector<int> res1,res2;//存储两个结果
stack<int> stk1,stk2;//单调栈//找左侧第一栋比自己高的楼房的编号
void leftFind(){//从左往右找 for(int i = 0;i < N;i++){while(!stk1.empty()){if(heights[stk1.top()] <= heights[i]){stk1.pop();}else{res1.push_back(stk1.top());break;}}if(stk1.empty()){res1.push_back(-2);}stk1.push(i);} 
} //找右侧第一栋比自己高的楼房的编号
void rightFind(){//从右往左找 for(int i = N - 1;i >= 0;i--){while(!stk2.empty()){if(heights[stk2.top()] <= heights[i]){stk2.pop();}else{res2.push_back(stk2.top());break;}}if(stk2.empty()){res2.push_back(-2);}stk2.push(i);}//反转结果数组reverse(res2.begin(),res2.end());
}int main(){//输入整数数组  /*int t; while(cin.peek() != '\n'){scanf("%d",&t);nums.push_back(t);}*///输入楼房数量scanf("%d",&N);//输入各楼房高度int h;for(int i = 0;i < N;i++){scanf("%d",&h);heights.push_back(h);} //-------------------------------//找左侧第一栋比自己高的楼房的编号leftFind(); //找右侧第一栋比自己高的楼房的编号rightFind();//输出结果//输出左侧第一栋比自己高的楼房的编号 for(int i = 0;i < res1.size();i++){printf("%d ",res1[i] + 1);} printf("\n");//输入右侧第一栋比自己高的楼房的编号for(int i = 0;i < res2.size();i++){printf("%d ",res2[i] + 1);} return 0;
} 
总结

解题思路:题目显然是要找上一个高大值和下一个更大值,适合使用单调栈

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

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

相关文章

【算法优选】 动态规划之简单多状态dp问题——壹

文章目录 &#x1f38b;前言&#x1f38d;[按摩师](https://leetcode.cn/problems/the-masseuse-lcci/)&#x1f6a9;题目描述&#x1f6a9;算法思路&#xff1a;&#x1f6a9;代码实现 &#x1f340;[打家劫舍二](https://leetcode.cn/problems/house-robber-ii/description/)…

基于LDA的评论大数据的分析及主题建模

1.微博的关键词大数据采集&#xff1b; 已完成&#xff0c;待优化 2.LDA 错误1&#xff1a;使用了import pyLDAvis.sklearn&#xff0c;提示没有模块no module named pyldavis.sklearn。 默认安装 pyLDAvis3.4.1&#xff0c;最后降级处理&#xff0c;解决方式&#xff1a; …

给定一个整数数组和一个整数目标值,在该数组中找出和为目标值的那两个整数,并返回它们的数组下标。(找到一个就返回)

#第一种方法# #时间换取空间&#xff1a;两个循环求解# def search(nums,target):for i in nums:start nums.index(i) 1for j in nums[start: ]:if i j target:result [nums.index(i)]next_index nums[start:].index(j) startresult.append(next_index)return result …

docker ps -a 要求只显示自己想要的信息

在使用 docker ps -a 要求只显示这下面这几个字段&#xff0c;不显示其他的内容&#xff0c;方便查看哪些容器在运行&#xff0c;那些已经挂起。 例子&#xff1a; 我只想想显示这几个字段&#xff1a; CONTAINER ID STATUS NAMES docker ps -a --format "table {{.ID}…

EasyX图形化学习(三)

1.帧率&#xff1a; 即每秒钟界面刷新次数&#xff0c;下面以60帧为例&#xff1a; 1.数据类型 clock_t&#xff1a; 用来保存时间的数据类型。 2.clock( ) 函数&#xff1a; 用于返回程序运行的时间,无需参数。 3.例子&#xff1a; 先定义所需帧率&#xff1a; const …

20230118-【UNITY 学习】增加攀登系统

替换脚本PlayerMovement_04.cs using System.Collections; using System.Collections.Generic; using UnityEngine;public class PlayerMovement_05 : MonoBehaviour {private float moveSpeed; // 玩家移动速度public float walkSpeed 7; // 行走速度public float sprintSpee…

[笔记]深度学习入门 基于Python的理论与实现(一)

代码仓库 gitee 1. python 入门 1.5之前是python安装和基础语法, 我直接跳过了 1.5 Numpy 深度学习中经常出现数组和矩阵运算&#xff0c;Numpy 的数组类 numpy.array 提供了很多便捷的方法 1.5.1 导入 Numpy import numpy as np1.5.2 生成 Numpy 数组 np.array()&#xf…

C++ 设计模式之策略模式

【声明】本题目来源于卡码网&#xff08;题目页面 (kamacoder.com)&#xff09; 【提示&#xff1a;如果不想看文字介绍&#xff0c;可以直接跳转到C编码部分】 【设计模式大纲】 【简介】什么是策略模式&#xff08;第14种模式&#xff09; 策略模式是⼀种⾏为型设计模式&…

西门子WINCC常用C脚本1

1.置位&#xff0c;复位&#xff0c;取反 获取变量值&#xff1a;GetTagBit(可以是位也可以是字节&#xff0c;字&#xff0c;双字等具体字母不同) 设置变量值&#xff1a;SetTagBit 置位&#xff1a;SetTagBit&#xff08;"变量名",1&#xff09; 复位&#xff…

Node+Express编写接口---前端

前端页面 vue_node_admin: 第一个以node后端,vue为前端的后台管理项目https://gitee.com/ah-ah-bao/vue_node_admin.git

java-log4j日志冲突解决

一、概述 java日志框架较多&#xff0c;其中主流的slf4j和commons-logging是日志接口&#xff0c;log4j、log4j2和logback是真正的日志实现库。 二、具体库单独使用 2.1 log4j <dependency><groupId>log4j</groupId><artifactId>log4j</artifa…

Ceph分布式存储(1)

目录 一.ceph分布式存储 Ceph架构&#xff08;自上往下&#xff09; OSD的存储引擎&#xff1a; Ceph的存储过程&#xff1a; 二. 基于 ceph-deploy 部署 Ceph 集群 20-40节点上添加3块硬盘&#xff0c;一个网卡&#xff1a; 10节点为admin&#xff0c;20-40为node&…

指针理解C部分

目录 1.二级指针 2.指针数组 2.1指针数组的定义和表现形式 2.2指针数组模拟实现二维数组 2.2.1二维数组 2.2.2使用指针数组模拟实现二维数组 3.字符指针 2.数组指针 3.二维数组传参 4.函数指针 4.1函数指针变量的定义和创建 4.2函数指针变量的使用 4.3两段有趣的代码 4.…

Python自动化测试中APScheduler Flask的应用示例

使用背景 实际项目中&#xff0c;需要验证打点数据在各个系统中收集是否一致&#xff0c;而部分节点打点数据收集是通过异步任务实现的&#xff0c;等待时间比较久。为应对业务异步操作处理&#xff0c;实现异步数据的收集&#xff0c;经过调研后&#xff0c;选择了 APSchedule…

ASOP的电池设置

fuelgauge 中文直译为“油量表”。在Android中&#xff0c;通常是与电池电量相关的模块&#xff0c;主要是负责显示设备的电池状态信息。 BatteryManager 路径在android/os下&#xff0c;提供了与系统电池服务交互的api&#xff0c;用于获取实时电池状态信息&#xff0c;包含…

JMeter实操入门之登录

JMeter实操入门之登录 前言初级-无变量的登录线程组取样器-HTTP请求 进阶-定义变量的登录用户定义的变量获取JSON返回的数据-tokentoken设置全局变量 前言 安装及环境配置教程可移步&#xff1a;JMeter安装与配置环境 本篇文章针对小白进一步的认识及运用JMeter&#xff0c;围绕…

【一天一个算法】---时间轮算法

简介 时间轮算法&#xff08;Timing Wheel Algorithm&#xff09;是一种用于处理定时任务的算法。它的原理是使用固定大小的时间轮&#xff0c;将时间划分成一系列的时间槽&#xff08;time slot&#xff09;&#xff0c;每个时间槽表示一个时间间隔。每个时间槽关联一个任务列…

湖(岛屿)

from book&#xff1a;挑战程序设计竞赛

docker 的 Dockerfile 简单使用

#注意事项&#xff1a;容器内是否能正常使用防火墙取决于 你的宿主机和容器是否是同一种系统 #服务器系统 推荐使用 almalinux 容器镜像下载 docker pull almalinux:8.8 #桌面系统 推荐 deepin和mint 附件下载 有道云笔记 下面是编译一个新镜像 更新系统 安装ssh 以及提升…

智能小程序小部件(Widget)媒体组件属性说明和示例代码汇总

camera 基础库 2.2.0 开始支持, 低版本需做兼容处理。 系统相机。相关 API&#xff1a;ty.createCameraContext。这是基于异层渲染的原生组件, 请注意原生组件使用限制。 属性说明 属性名类型默认值必填说明modestringnormal否应用模式&#xff0c;只在初始化时有效&#xff…