n个整数的无序数组,找到每个元素后面比它大的第一个数,要求时间复杂度为O(N)
#include <iostream>
#include <vector>
#include <stack>
using namespace std;
vector<int> findMax(vector<int> nums) {
int length = nums.size();
if (length == 0) return nums;
vector<int> res(length);
stack<int> s;
for (int i = 0; i < length; ++i) {
while (!s.empty() && nums[s.top()] < nums[i]) {
res[s.top()] = nums[i];
s.pop();
}
s.push(i);
}
while (!s.empty()) {
res[s.top()] = -1;
s.pop();
}
for (int i = 0; i < length; ++i) {
i && cout << " ";
cout << res[i];
}
cout << endl;
return res;
}
int main() {
int length;
cin >> length;
vector<int> nums(length);
for (int i = 0; i < length; ++i) {
cin >> nums[i];
}
findMax(nums);
system("pause");
return 0;
}