单调栈: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;
}