链接:https://www.nowcoder.com/questionTerminal/2a2c00e7a88a498693568cef63a4b7bb
来源:牛客网

给定一个可能含有重复值的数组 arr,找到每一个 i 位置左边和右边离 i 位置最近且值比 arr[i] 小的位置。返回所有位置相应的信息。

输入描述:

第一行输入一个数字 n,表示数组 arr 的长度。
以下一行输入 n 个数字,表示数组的值

输出描述:

输出n行,每行两个数字 L 和 R,如果不存在,则值为 -1,下标从 0 开始。

思路:

采用单调栈

单调栈:栈内的元素都保持单调递增或者单调递减的栈。

核心代码:

stack<int> s;
for(int i=0;i<n;i++){while(!s.empty()&&arr[s.top()]>=arr[i]) s.pop();//TODOif(s.empty())......else...........//TODO  s.push(i);}

实现:

#include<iostream>
#include<vector>
#include<stack>
#include<cassert>
using namespace std;
void printV(vector<vector<int>>& m);
int main(){int n,value;vector<int> arr;stack<int> s;cin>>n;assert(1<=n&&n<=1000000);for(int i=0;i<n;i++){cin>>value;assert(-1000000<=value&&value<=1000000);arr.push_back(value);}vector<int> tem={0,0};vector<vector<int>> res(n,tem);for(int i=0;i<n;i++){while(!s.empty()&&arr[s.top()]>=arr[i]) s.pop();res[i][0]=s.empty()?-1:s.top();s.push(i);}while(!s.empty()) s.pop();for(int i=n-1;i>=0;i--){while(!s.empty()&&arr[s.top()]>=arr[i]) s.pop();res[i][1]=s.empty()?-1:s.top();s.push(i);}printV(res);return 0;
}
void printV(vector<vector<int>>& m){int rowNum = m.size();int colNum = m[0].size();for(int i=0;i<rowNum;i++){for(int j=0;j<colNum;j++)cout<<m[i][j]<<" ";cout<<endl;}}

运行结果:

您的代码已保存
运行超时:您的程序未能在规定时间内运行结束,请检查是否循环有错或算法复杂度过大。
case通过率为85.00%

暂时没找到合适的解决方法,现在放在这仅供大家交流。

牛客笔试-每一个 i 位置左边和右边离 i 位置最近相关推荐

  1. 牛客笔试OJ-在线编辑器输入输出总结

    牛客在线笔试输入输出总结 牛客在线OJ 1.计算A+B(1) 输入输出描述 示例 我的解答 2.计算A+B(2) 输入输出描述 示例 我的解答 3.计算A+B(3) 输入输出描述 示例 我的解答 4. ...

  2. 牛客每日练习----一个背包问题,判断奥运年,沃老师学生的成绩

    我喜欢给自己压力,必须得定一个很高的目标,逼自己朝着这个目标前进,不管会不会实现,都是一个动力.                                      ----喻言 链接:http ...

  3. 牛客笔试真题-字节2019春招

    字节真的每一题都让人窒息 1.小包最近迷上了一款叫做雀魂的麻将游戏,但是这个游戏规则太复杂,小包玩了几个月了还是输多赢少. 于是生气的小包根据游戏简化了一下规则发明了一种新的麻将,只留下一种花色,并且 ...

  4. c语言 一个数组奇数左边 偶数右边,C语言设计实验报告(第七次)

    姓名:龚政 实验地点:寝室 实验时间:2020.6.1 实验项目:8.3.1指针基础及指针运算:8.3.2数据交换:8.3.3字符串反转及字符串连接:8.3.4数组元素奇数偶数排列 实验目的与要求 加 ...

  5. C#取一个字符串的左边或右边的n个字符

    一.函数 1.c#中如何取字符串最左边和最右边的n个字符?? string left = str.Substring(0, n); string right = str.Substring(str.L ...

  6. 牛客网剑指Offer_66道python(更新中)

    归档:剑指offer 牛客网剑指Offer_编程题python实现 导语 1 Fibonacci数列及其应用(考察:递归与循环) 斐波那契数列 跳台阶 变态跳台阶 矩形覆盖 2 数组 二维数组中的查找 ...

  7. python简单实践作业答案_python入门实践四:爬取牛客网面试专项练习题及答案

    说明:个人练手python用. 操作系统:window10 x64 IDE:Pycharm 2017.2.2 Python版本:3.6.2 目标 牛客网是一个IT笔试面试的平台,提供了很多题库,今天我 ...

  8. 炸鸡块君与FIFA22 线段树(牛客)

    原题链接:登录-专业IT笔试面试备考平台_牛客网  维护一个线段树的三种不同状态  树的大小是点数的4倍,记得数组要开四倍 AC代码: #include<bits/stdc++.h> us ...

  9. 牛客优聘,易上手、人才优、双奔赴,招聘神器真香了!

    你是否有以下问题: 只想快速招个人,但产品一堆功能眼花缭乱,花时间精力摸索,实际上用的功能就几个? 人才要求高,但收了一堆质量不高的简历,花大量寻找和筛选成本仅有个别简历通关? 好人才少且总对你爱答不 ...

最新文章

  1. UbuntuKylin技巧
  2. linux看php安装路径,linux下查找php安装路径的方法是什么
  3. 计算高效,时序一致,超清还原!清华NYU 提出 RRN:视频超分新型递归网络
  4. 基于注解进行bean的装配
  5. 常用的xshell用vi命令编辑文本
  6. CKEditor 5 v19.1.1 发布,新增导出为 PDF 功能
  7. Job 存储和持久化 (第三部分)
  8. 修正oracle错误,oracle数据库菜鸟教程 [数据库中一个常见错误信息诊断与修正]
  9. 开心网页面,使用CSS3
  10. Spring的事务传播特性
  11. 【转】一生必看的成功学书(转载)
  12. Java多线程系列--【JUC锁04】-公平锁(二)
  13. C++中的模板及其使用
  14. 树莓派raspberryPI-4b 官方镜像raspios-bullseye-arm64 系統下编译构建ros2 rolling环境(附下载完整镜像资料)
  15. Wireshark系列之6 数据流追踪
  16. vue3 集成西瓜视频播放器xgplayer
  17. 体育测试成绩用什么软件制表,使用Word制作成绩表表格的方法
  18. 转载:摄影相关照片(相纸)尺寸大…
  19. 安卓之软键盘监听与切换软键盘状态和重新获取EditText焦点
  20. 【181130】VC++ 模拟地球太阳月亮运动的过程源代码

热门文章

  1. 轴向柱塞泵体加工生产线专机及主要辅助设备多头钻床及攻丝机床液压系统设计
  2. 随机种子不随机(random_state)
  3. html页面栅格系统,详解CSS中的栅格系统
  4. Navicat远程连接服务器报错ERROR 2003 (HY000) Can‘t connect to MySQL server on ‘IP‘ (10061)
  5. Ajax的实例以及bootstrap的使用
  6. 编写一个程序,用于计算体质指数BMI,并打印结果
  7. verilog中关于并行处理的心得
  8. 计算机采购合同书,计算机采购合同范本-合同范本|华律网
  9. cmos半导体_什么是CMOS(互补金属氧化物半导体)?
  10. matlab数学实验报告syms,MATLAB验练习题(计算机) 南邮 MATLAB 数学实验大作业答案