小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 第四题相关推荐

  1. 2012腾讯校园招聘笔试成都站回忆版

    腾讯的笔试题目比较基础 具体的题目记不清除了,设计到的知识点: 1.c语言基础:sizeof,strlen的用法. 2.linux基本命令umask 3.SQL语言 4.数据结构的知识,建立二叉树,顺 ...

  2. 腾讯校园招聘笔试 2019-8-17 第五题

    自己是真滴菜啊,跟着师兄做校招笔试被虐的体无完肤.在这里记录一下几道题的解法吧. 由于业绩优秀,公司给小Q放了n天的假.身为工作狂的小Q打算在假期中工作.锻炼或者休息.他有一个奇怪的习惯,:不会连续两 ...

  3. 腾讯校园招聘笔试 2019-8-17 第四题 另一种解法

    之前在博客https://blog.csdn.net/hanzhen7541/article/details/99710954中我们讨论了一种单调栈的解法,复杂度是O(nlogn).那么实际上还有一种 ...

  4. 腾讯校园招聘笔试 2019-8-17 第三题

    小Q在进行一场竞技游戏,这场游戏的胜负关键就在于能够能争夺一条长度为L的河道,即可以看作是[0,L]的一条数轴. 这款竞技游戏当中有n个可以提供视野的道具-真视守卫,第i个真视守卫能够覆盖区间[xi, ...

  5. [历年IT笔试题]2014腾讯校园招聘笔试试题

  6. 2011深信服校园招聘笔试面试

    http://blog.sina.com.cn/s/blog_48c9576b0100me1y.html 9月26号深信服校园招聘笔试 都说深信服的题又偏又难,果然不假.不过还有有很多值得多思考的题. ...

  7. 腾讯实习生招聘笔试题目

    2013腾讯实习生笔试题  一. 单项选择题 1) 给定3个int类型的正整数x,y,z,对如下4组表达式判断正确的选项() Int a1=x+y-z; int b1=x*y/z; Int a2=x- ...

  8. 百度2014校园招聘笔试面试汇总

    目 录 1. 百度笔试 2 1.1百度2014校园招聘笔试题(成都站,软件研发岗) 2 1.2  2013百度校园招聘-机器学习和数据挖掘工程师-笔试题 7 1.3  百度2014校园招聘 技术研发题 ...

  9. 九度OJ 1525 子串逆序打印 -- 2012年Google校园招聘笔试题目

    题目地址:http://ac.jobdu.com/problem.php?pid=1525 题目描述: 小明手中有很多字符串卡片,每个字符串中都包含有多个连续的空格,而且这些卡片在印刷的过程中将字符串 ...

最新文章

  1. Linux 上的几个命令 dd, mv, rename
  2. 从智能客服说起,看小i机器人如何用AI赋能产业升级改造|M-TECH AI助力中国智造产业论坛...
  3. 智能音箱音效哪个好_华为支浩:音质好是底线,AI基本功扎实让智能音箱不再是“玩具”...
  4. [LeetCode] 141. Linked List Cycle 单链表判圆算法
  5. Hive安装与配置MySQL元数据库
  6. 手把手教用XNA开发winphone7游戏(四)
  7. Spring : 异步注解 @EnableAsync 和 @Async
  8. 【读书笔记】 —— 金融
  9. Python全栈(四)高级编程技巧之4.元类编程、迭代器和生成器
  10. 结构可靠性分析中响应面方法的基本思想
  11. 我的Android之路
  12. Python高级配色 RGB
  13. 优秀logo设计解析_国外30个优秀的logo的设计思维分析
  14. CSAPP Lab2
  15. 2022最新在线工单管理系统源码+PHP内核
  16. 基于秘密共享的MPC:GMW、BGW、Beaver triple
  17. sum与countif、countifs函数套用
  18. 回望2018,这6家AI+教育公司亮了!| AI最佳掘金案例榜...
  19. mt5虚拟服务器,mt5云服务器
  20. 深入理解面向对象,面向对象3个特性7个原则6种关系

热门文章

  1. 自学python后自己接单-分享一下我的Python自学历程,分享下我自己学习方法
  2. python和java哪个好找工作-2019年Python、Java、C++学哪个更好?薪资更高?
  3. python和c先学哪个-对于初学者而言,python和 c语言先学哪个好
  4. python小白从哪来开始-小白学python(1)——从selenium开始
  5. python是什么 自学-你是如何自学 Python 的?
  6. 机器学习--用朴素贝叶斯分类法辨别男女声音
  7. ICRoute 语音识别芯片/声控芯片 用声音去沟通 LD332X系列语音识别芯片
  8. 【计算机网络笔记】计算机网络五层体系结构
  9. x264 编码器选项分析 (x264 Codec Strong and Weak Points) 1
  10. mysql c库 示例_选择MySQL数据库进行连接的简单示例