练习题 百亿富翁

2024-01-20 01:20
文章标签 练习题 百亿 富翁

本文主要是介绍练习题 百亿富翁,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目

题目描述

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

已知这排楼房一共有 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.chinasem.cn/article/624339

相关文章

dp算法练习题【8】

不同二叉搜索树 96. 不同的二叉搜索树 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 输入:n = 3输出:5 示例 2: 输入:n = 1输出:1 class Solution {public int numTrees(int n) {int[] dp = new int

C语言练习题之 数组中出现次数超过一半的数

题目描述 给一个长度为 n 的数组,数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。 数据范围:n≤50000,数组中元素的值0≤val≤10000 要求:空间复杂度:O(1),时间复杂度O(n) 输入描述: 保证数组输入非空,且保证有

算法练习题17——leetcode54螺旋矩阵

题目描述 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。  代码 import java.util.*;class Solution {public List<Integer> spiralOrder(int[][] matrix) {// 用于存储螺旋顺序遍历的结果List<Integer> result = new ArrayList

ES实现百亿级数据实时分析实战案例

点击上方蓝色字体,选择“设为星标” 回复”资源“获取更多资源 背景 我们小组前段时间接到一个需求,希望能够按照小时为单位,看到每个实验中各种特征(单个或组合)的覆盖率、正样本占比、负样本占比。我简单解释一下这三种指标的定义: 覆盖率:所有样本中出现某一特征的样本的比例正样本占比:所有出现该特征的样本中,正样本的比例负样本占比:所有出现该特征的样本中,负样本的比例 光看这三个指标,大家可能会觉得

Python练习题——站队顺序输出

题目来源:Python语言程序设计(中国大学MOOC) 题目描述: 有一群人站队,每人通过一对整数(h, k)来描述,其中h表示人的高度,k表示在此人前面队列中身高不小于此人的总人数。 实现一个算法输出这个队列的正确顺序。 输入格式: 输入格式为二维列表,即 list[list[]]形式 外层list包含队列中全部的人,内层list为[h,k]格式,代表个人信息。 输出格式: 输

Python练习题——自幂数(水仙花数)

题目来源:Python语言程序设计(中国大学MOOC) 授课老师:嵩天、黄天羽、礼欣 题目描述: “3位水仙花数”是指一个三位整数,其各位数字的3次方和等于该数本身。例如:ABC是一个”3位水仙花数”,则:A的3次方+B的3次方+C的3次方 = ABC。 请按照从小到大的顺序输出所有的3位水仙花数,请用”逗号”分隔输出结果。 代码: output = []for d in range

Mysql基础练习题 1378.使用唯一标识符替换员工ID (力扣)

1378. 展示每位用户的 唯一标识码(unique ID );如果某位员工没有唯一标识码,使用 null 填充即可。 你可以以任意顺序返回结果表。 题目链接: https://leetcode.cn/problems/replace-employee-id-with-the-unique-identifier/ 建表插入数据: Create table If Not Exists E

环形链表练习题笔记

参考大佬题解 141. 环形链表 - 力扣(LeetCode) 环形链表 141. 环形链表 - 力扣(LeetCode) /*** Definition for singly-linked list.* class ListNode {* int val;* ListNode next;* ListNode(int x) {* val

erlang学习:用OTP构建系统23.12练习题

练习要求 制作一个名为prime_tester_server的gen_server,让它测试给定的数字是否是质数。 你可以使用lib_primes.erl里的is_prime/2函数来处理(或者自己实现一个更好的质数测试函 数)。把它添加到sellaprime_supervisor.erl的监控树里。 质数判断server实现 -module(prime_tester_server).-b

Java语言程序设计基础篇_编程练习题**17.21 (十六进制编辑器)

目录 题目:**17.21 (十六进制编辑器) 代码示例 结果展示 题目:**17.21 (十六进制编辑器)   编写一个 GUI 应用程序,让用户在文本域输入一个文件名,然后按回车键,在文本域显示它的十六进制表达形式。用户也可以修改十六进制代码,然后将它回存到这个文件中,如图17-23b所示。 代码示例 编程练习题17_21HexEditor.java pack