腾讯校园招聘笔试 2019-8-17 第四题
小Q在周末的时候和他的小伙伴来到大城市逛街,一条步行街上有很多高楼,共有n座高楼排成一行。
小Q从第一栋一直走到了最后一栋,小Q从来没有看到过这么多高楼,所以他想知道他在每栋楼的位置处能看到多少栋楼呢?(当前面的楼的高度大于等于后面的楼时,后面的楼将被挡住)
输入描述:
输入第一行将包含一个数字n,表示楼的栋数,接下来的一行将包含n个数字wi(1<=i<=n),代表一栋楼的高度。
1<=n<=100000;
1<=wi<=100000;
输出描述:
输出一行,包含空格分隔的m个数字vi,分别代表小Q在第i栋楼的时候能看到的楼的数量。
这道题,如果用最常规的办法,一定是超时的,因为复杂度是O(n^2),这明显不是一个很好的解法。那么怎么用O(nlogn)的时间复杂度呢?实际上单调栈就可以很好的解决这个问题。首先求出来从一个点向左看增的单调栈(也就是从左往右减的单调栈,表示小Q往左看能看到的楼的数量),然后求出来一个点向右看增的单调栈,最后对应位置相加再加1就可以得到总的结果了。
代码如下:
int main(){//实现一个单调栈int n;cin >> n;int front[100005];int back[100005];int height[100005];//表示每个楼的高度stack<int> st_left2right;//表示楼的高度的单调栈for (int i = 0; i < n; i++){cin >> height[i];front[i] = st_left2right.size();//对单调栈进行处理,实现一个高度下降的单调栈if (i == 0) st_left2right.push(height[0]);//第一个需要特殊处理else if (st_left2right.top() > height[i]) st_left2right.push(height[i]);else{while (!st_left2right.empty() && st_left2right.top() <= height[i]){st_left2right.pop();}st_left2right.push(height[i]);}}stack <int> st_right2left;for (int i = n - 1; i >= 0; i--){back[i] = st_right2left.size();if (i == n - 1) st_right2left.push(height[i]);else if (st_right2left.top() > height[i]) st_right2left.push(height[i]);else{while (!st_right2left.empty() && st_right2left.top() <= height[i]){st_right2left.pop();}st_right2left.push(height[i]);}}for (int i = 0; i < n; i++){cout << front[i] + back[i] + 1<<" ";}cout << endl;system("pause");return 0;
}
我自己菜,就要多练习,多思考。
腾讯校园招聘笔试 2019-8-17 第四题相关推荐
- 2012腾讯校园招聘笔试成都站回忆版
腾讯的笔试题目比较基础 具体的题目记不清除了,设计到的知识点: 1.c语言基础:sizeof,strlen的用法. 2.linux基本命令umask 3.SQL语言 4.数据结构的知识,建立二叉树,顺 ...
- 腾讯校园招聘笔试 2019-8-17 第五题
自己是真滴菜啊,跟着师兄做校招笔试被虐的体无完肤.在这里记录一下几道题的解法吧. 由于业绩优秀,公司给小Q放了n天的假.身为工作狂的小Q打算在假期中工作.锻炼或者休息.他有一个奇怪的习惯,:不会连续两 ...
- 腾讯校园招聘笔试 2019-8-17 第四题 另一种解法
之前在博客https://blog.csdn.net/hanzhen7541/article/details/99710954中我们讨论了一种单调栈的解法,复杂度是O(nlogn).那么实际上还有一种 ...
- 腾讯校园招聘笔试 2019-8-17 第三题
小Q在进行一场竞技游戏,这场游戏的胜负关键就在于能够能争夺一条长度为L的河道,即可以看作是[0,L]的一条数轴. 这款竞技游戏当中有n个可以提供视野的道具-真视守卫,第i个真视守卫能够覆盖区间[xi, ...
- [历年IT笔试题]2014腾讯校园招聘笔试试题
- 2011深信服校园招聘笔试面试
http://blog.sina.com.cn/s/blog_48c9576b0100me1y.html 9月26号深信服校园招聘笔试 都说深信服的题又偏又难,果然不假.不过还有有很多值得多思考的题. ...
- 腾讯实习生招聘笔试题目
2013腾讯实习生笔试题 一. 单项选择题 1) 给定3个int类型的正整数x,y,z,对如下4组表达式判断正确的选项() Int a1=x+y-z; int b1=x*y/z; Int a2=x- ...
- 百度2014校园招聘笔试面试汇总
目 录 1. 百度笔试 2 1.1百度2014校园招聘笔试题(成都站,软件研发岗) 2 1.2 2013百度校园招聘-机器学习和数据挖掘工程师-笔试题 7 1.3 百度2014校园招聘 技术研发题 ...
- 九度OJ 1525 子串逆序打印 -- 2012年Google校园招聘笔试题目
题目地址:http://ac.jobdu.com/problem.php?pid=1525 题目描述: 小明手中有很多字符串卡片,每个字符串中都包含有多个连续的空格,而且这些卡片在印刷的过程中将字符串 ...
最新文章
- Linux 上的几个命令 dd, mv, rename
- 从智能客服说起,看小i机器人如何用AI赋能产业升级改造|M-TECH AI助力中国智造产业论坛...
- 智能音箱音效哪个好_华为支浩:音质好是底线,AI基本功扎实让智能音箱不再是“玩具”...
- [LeetCode] 141. Linked List Cycle 单链表判圆算法
- Hive安装与配置MySQL元数据库
- 手把手教用XNA开发winphone7游戏(四)
- Spring : 异步注解 @EnableAsync 和 @Async
- 【读书笔记】 —— 金融
- Python全栈(四)高级编程技巧之4.元类编程、迭代器和生成器
- 结构可靠性分析中响应面方法的基本思想
- 我的Android之路
- Python高级配色 RGB
- 优秀logo设计解析_国外30个优秀的logo的设计思维分析
- CSAPP Lab2
- 2022最新在线工单管理系统源码+PHP内核
- 基于秘密共享的MPC:GMW、BGW、Beaver triple
- sum与countif、countifs函数套用
- 回望2018,这6家AI+教育公司亮了!| AI最佳掘金案例榜...
- mt5虚拟服务器,mt5云服务器
- 深入理解面向对象,面向对象3个特性7个原则6种关系
热门文章
- 自学python后自己接单-分享一下我的Python自学历程,分享下我自己学习方法
- python和java哪个好找工作-2019年Python、Java、C++学哪个更好?薪资更高?
- python和c先学哪个-对于初学者而言,python和 c语言先学哪个好
- python小白从哪来开始-小白学python(1)——从selenium开始
- python是什么 自学-你是如何自学 Python 的?
- 机器学习--用朴素贝叶斯分类法辨别男女声音
- ICRoute 语音识别芯片/声控芯片 用声音去沟通 LD332X系列语音识别芯片
- 【计算机网络笔记】计算机网络五层体系结构
- x264 编码器选项分析 (x264 Codec Strong and Weak Points) 1
- mysql c库 示例_选择MySQL数据库进行连接的简单示例