比如一个数组,arr[]={1,2,4,3,5}
输出2,4,5
这题用到了栈来存下标,然后操作,做法值得学习。要注意的小地方就是输出的结果vecotr。如果操作的次数小于n,要重新减少一下容量。不然返回的vector后面没填满的部分也返回了。
#include<iostream>
using namespace std;
#include<vector>
#include<stack>
vector<int> findMax(vector<int> num);
int main()
{
vector<int> arr = { 2,1,4,3,5 };
vector<int>res = findMax(arr);
for (auto iter= res.begin(); iter!= res.end(); iter++)
{
cout << *iter << " ";
}
return 0;
}
vector<int> findMax(vector<int> num)
{
if (num.size() == 0)
return num;
vector<int> res(num.size(),0);
int i = 0;
stack<int> s;
int count = 0;
while (i < num.size())
{
if (s.empty() || num[s.top()] >= num[i])
{
s.push(i++);//栈存的是下标i。不是具体的数
}
else
{
count++;
res[s.top()] = num[i];
s.pop();
}
}
res.resize(count);//使用count计数。使得返回的vector缩小到合适大小
return res;
}