在后面的元素中,找一个最小的大于当前元素的。维护了一个有序栈。
import java.util.*;
public class NextElement {
public int[] findNext(int[] A, int n) {
// write code here
Stack<Integer> stack1 = new Stack<>(); //主栈
Stack<Integer> stack2 = new Stack<>(); //辅助栈
int[] res = new int[n]; //stack1中的元素是从栈顶到栈底从小到大排列的
//保证栈内元素的有序性
for(int i=n-1;i>=0;i--){ //当前考虑的元素
while(!stack1.isEmpty() && A[i]>=stack1.peek())
stack2.push(stack1.pop());
//在stack中的都是i后面的元素
if(stack1.isEmpty()){
stack1.push(A[i]);
res[i] = -1; //在后面不存在更大的元素了
}
else{
res[i] = stack1.peek();
stack1.push(A[i]);
}
while(!stack2.isEmpty())
stack1.push(stack2.pop());
}
return res;
}
}