import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner=new Scanner(System.in);
Deque<Integer> stackDeque=new ArrayDeque<>();
int n=scanner.nextInt();
int a[]=new int[n];
for (int i = 0; i < a.length; i++) {
a[i]=scanner.nextInt();
}
int num=n;//期待的值
int b[]=new int[n];
int flag=0;
for (int i = 0; i < a.length; i++) {
stackDeque.push(a[i]);
if(a[i]==num) {
b[flag]=stackDeque.pop();
flag++;
num--;
}
}
while(!stackDeque.isEmpty()) {
b[flag]=stackDeque.pop();
flag++;
}
for (int i = 0; i < b.length; i++) {
System.out.print(b[i]+" ");
}
}
}
这题考的是贪心,一开始想要每一次期待的最大值,所以我们设置一个num,表示它所期待的传入新序列的值,然后当压入栈的值与该值相等时,就出栈,如果所有数字都压入栈了,那么我们就只能把栈中元素逐一输出了



京公网安备 11010502036488号