欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

单调栈:n个整数的无序数组,要求找到每个元素后面比它大的第一个数,用vector返回,要求时间复杂度为O(N)

程序员文章站 2024-03-15 19:07:42
...
#include <bits/stdc++.h>
using namespace std;

vector<int> find1(vector<int>num)
{
    if(num.size() == 0) return {};
    vector<int> res(num.size(),-1);	//找不到设为-1
    stack<int> s;
    int i = 0;
    while(i < num.size())
    {
        if(s.empty() || num[s.top()] >= num[i])     s.push(i++); //当前元素比栈顶元素小,加入单调栈中
        else        
        {
            res[s.top()] = num[i]; //当前元素是栈顶元素后面的第一个较大元素,加入结果中
            s.pop();
        }
    }
    return res;
}

int main()
{
    vector<int> num = {1, 3, 2, 4, 99, 101, 5, 8};
    vector<int> res = find1(num);
    for(auto i : res)
        cout << i << "  ";
    return 0;
}