贪心思想每次都选最大的数
如果当前位置的元素比后面的元素都大,就选择这个元素,选择之后就踢掉这个元素,因为踢掉了这个元素那么当前位置前面的元素也就有可能是最大的,所以枚举前面的元素
#include <iostream>
#include <stack>
using namespace std;
const int maxn = 1000010;
int arr[maxn];
int nums[maxn];
stack<int>s;
int main()
{
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> nums[i];
}
for (int i = n; i >= 1; i--) {
arr[i] = max(nums[i],arr[i + 1]);
}
for (int i = 1; i <= n; i++) {
while (!s.empty() && s.top() > arr[i]) {
cout << s.top() << " ";
s.pop();
}
s.push(nums[i]);
}
while (!s.empty()) {
cout << s.top() << " ";
s.pop();
}
}


京公网安备 11010502036488号