参考:https://blog.csdn.net/weixin_38679007/article/details/80659703
//给一个数组,对于每个元素,找出它后面第一个大于它的元素下标
@Test
public void findIndex(){
/*
* 实现方法:用栈实现
步骤1:遍历所有元素:若栈非空并且栈顶元素小于当前元素则弹出所有小于当前元素的栈内元素,
并打印当前元素的下标,然后将当前元素入栈。
步骤2:若栈非空,弹出栈内所有元素并同时打印-1.
*
* */
//0 1 2 3 4 5 6 7
int[] numbers={5,9,3,0,4,5,6,9};
// 1 -1 4 4 5 6 7 -1
int[] result=new int[numbers.length];
Stack s=new Stack();
for(int i=0;i<numbers.length;i++){
if(s.isEmpty()) s.push(i);
else{
int index=0;
while(!s.isEmpty()){
index=(Integer)s.peek();
if(numbers[i]>numbers[index]) {
result[index]=i;
s.pop(); //弹出这个更小的元素下标
}
else break;
}
s.push(i);
}
}
while(s.isEmpty()==false){
int index=(Integer)s.pop();
result[index]=-1;
}
for(int i=0;i<numbers.length;i++){
System.out.print(result[i]+" ");
}
}