0
点赞
收藏
分享

微信扫一扫

单调栈 实现思想及c++代码

卿卿如梦 2022-04-17 阅读 43
算法

单调栈:面试常考知识点,由于它的实现代码极为短,常用于笔试 思想如下:

我们都知道栈这种数据结构是先进后出。因此,对于一组数来讲,我们给定一个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;

}

我们可以看到代码很短 有问题的小朋友欢迎留言 我们一起进步

举报

相关推荐

0 条评论