贪心思想每次都选最大的数
如果当前位置的元素比后面的元素都大,就选择这个元素,选择之后就踢掉这个元素,因为踢掉了这个元素那么当前位置前面的元素也就有可能是最大的,所以枚举前面的元素
#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(); } }