下一个较大元素
来源:互联网 发布:巨杉数据库 spark 编辑:程序博客网 时间:2024/04/30 11:22
题目描述
现在我们有一个int数组,请你找出数组中每个元素的下一个比它大的元素。
给定一个int数组A及数组的大小n,请返回一个int数组,代表每个元素比他大的下一个元素,若不存在则为-1。保证数组中元素均为正整数。
测试样例:
[11,13,10,5,12,21,3],7
返回:[13,21,12,12,21,-1,-1]
思路:从后往前维护一个单调栈,注意细节(代码把主函数加上了)
#include<cstdio>#include<algorithm>#include<vector>#include<stack>using namespace std;vector<int> findNext(vector<int> A, int n) { // write code here vector<int>v(n); if(n==0) return v; stack<int>s; for(int i=n-1;i>=0;i--){ if(s.empty()){ s.push(A[i]); v[i]=-1; } else if(s.top()>A[i]){ v[i]=s.top(); s.push(A[i]); } else{ bool ok=true; while(!s.empty()){ if(s.top()>A[i]){ v[i]=s.top(); s.push(A[i]); ok=false; break; } s.pop(); } if(ok){ s.push(A[i]);//记得要放进去 v[i]=-1; } } } return v;}int main(){ int n,x; vector<int>v,ans; freopen("in.txt","r",stdin); scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d",&x); v.push_back(x); } ans=findNext(v,n); printf("n==%d\n",n); for(int i=0;i<n;i++){ if(i&&i%10==0){ printf("\n"); } printf(" %d",ans[i]); } printf("\n"); return 0;}
0 0
- 下一个较大元素
- 下一个较大元素II
- 下一个较大元素
- 下一个较大元素
- 下一个较大元素
- 下一个较大元素
- 寻找下一个较大元素 --- 利用栈
- [程序员面试金典]1002.下一个较大元素
- 栈 之 寻找下一个较大元素 next greater element
- 程序员面试金典——下一个较大元素
- 下一个较大排列组合
- 下一个较大值
- 金典——下一个较大的元素2(需优化)
- 《Cracking the Coding Interview程序员面试金典》----下一个较大元素(所有比他大中最小的)
- 二叉树中序找下一个元素
- 返回下一个元素节点而不是下一个节点
- 找出较大的下一个数字组合 Next Permutation
- 下一个较大值 栈和队列(优化防止TLE)
- atom 快捷键
- PHP 汉字转拼音工具
- 深入理解Yii2.0(1) 属性
- 正则表达式引擎测试笔记
- 第3,6,7,10章读书笔记
- 下一个较大元素
- 操作系统时间改变之后,OGG Veridata应该进行的处理步骤
- 敏捷开发是一个什么样的开发模式
- OGG server 时间调整的注意事项与调整步骤
- 试下用内存映射处理海量数据
- USACO 1.2 Milking Cows
- 如何在Ubuntu下制作ISO镜像
- 【Cocos Creator 实战教程(4)】——黄金矿工(下)(占坑,以后再写,资源文件在此)
- bzoj1083: [SCOI2005]繁忙的都市