单调栈:面试常考知识点,由于它的实现代码极为短,常用于笔试 思想如下:
我们都知道栈这种数据结构是先进后出。因此,对于一组数来讲,我们给定一个x,要求输出X离左边(或右边)数最近的一个比他小(或比它大)的一个数
这里我们求一下离x左边最近的比他小的数
思想:首先,我们可以把大于x的数都踢出去。也就是说对于刚进来的数如果比x大 那么我们就可以删除栈顶元素(tt-1)即可
第二步:刚进来的数一定比之前插入的数要小,所以就可以得到一个严格单调的数列 则此时输出tt对应的值即可 如果不存在就返回-1
#include<iostream>
using namespace std;
const int N = 100010;
int nums[N],tt;
int main()
{
int n;
cin>>n;
while(n--)
{
int x;
cin>> x;
while(tt && nums[tt] >= x) tt--;
if(tt) cout << nums[tt]<<' ';
else cout << "-1"<<' ';
nums[++tt] = x;
}
return 0;
}
我们可以看到代码很短 有问题的小朋友欢迎留言 我们一起进步