题目描述
给定一个长度为 N的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出 −1。
思路
还就学习单调栈
C++ 代码
#include <iostream>
#include <stdio.h>
#include <stack>
using namespace std;
int main(){
int n;
scanf("%d", &n);
int res[n], arr[n];
stack <int> s;
for(int i = 0; i < n; i++){
scanf("%d", &arr[i]);
}
for(int i = 0; i < n; i++){
while(!s.empty() && s.top() >= arr[i]) s.pop();
if(!s.empty()) res[i] = s.top();
else res[i] = -1;
s.push(arr[i]);
}
for(int i = 0; i < n; i++){
printf("%d ", res[i]);
}
return 0;
}