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,表示它所期待的传入新序列的值,然后当压入栈的值与该值相等时,就出栈,如果所有数字都压入栈了,那么我们就只能把栈中元素逐一输出了