利用空间换取时间,鹬蚌相争,必有一伤
具体操作步骤可看https://blog.csdn.net/smileiam/article/details/88732245
#include<iostream>
#include<vector>
#include<stack>
using namespace std;
vector<int> Find(vector<int> num)
{
if (0 == num.size()) return num;
vector<int> res(num.size());
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();
}
}
while (!s.empty())//后边没有比它大的也会出栈
{
res[s.top()] = -1;
s.pop();
}
for (int j = 0; j < res.size(); j++)
cout << res[j] << ' ';
cout << endl;
return res;
}
int main()
{
vector<int> num = { 8, 2, 5, 4, 3, 9, 7, 2, 5 };
Find(num);
system("pause");
return 0;
}
结果为: