题目描述:
下一个较大元素II_牛客网
现在有一个数组,请找出数组中每个元素的后面比它大的最小的元素,若不存在则为-1。
给定一个int数组A及数组的大小n,请返回每个元素所求的值组成的数组。保证A中元素为正整数,且n小于等于1000。
输入示例:
[11,13,10,5,12,21,3],7
输出示例:
[12,21,12,12,21,-1,-1]
题目描述:
这道题呢,用一个递减的有序栈和一个辅助栈来做。从右到左遍历,维护一个递减的有序栈。当有序栈的栈顶元素小于等于当前元素时,将有序栈栈顶出栈压入辅助栈。如果此时有序栈不为空,则栈顶元素就是当前元素的后面比它大的最小元素;如果此时有序栈为空,说明当前元素后面没有比它大的元素。将当前元素压栈,然后再将辅助栈里的元素依次压入有序栈。具体代码如下~
代码实现:
import java.util.*;
public class NextElement {
public int[] findNext(int[] A, int n) {
// write code here
Stack<Integer> orderStack=new Stack<>();
Stack<Integer> aidStack=new Stack<>();
int[] ret=new int[n];
for(int i=n-1;i>=0;i--){
while(!orderStack.isEmpty()&&orderStack.peek()<=A[i]){
aidStack.push(orderStack.pop());
}
ret[i]=orderStack.isEmpty()?-1:orderStack.peek();
orderStack.push(A[i]);
while(!aidStack.isEmpty()){
orderStack.push(aidStack.pop());
}
}
return ret;
}
}