题目描述:
下一个较大元素_牛客网
现在我们有一个int数组,请你找出数组中每个元素的下一个比它大的元素。
给定一个int数组A及数组的大小n,请返回一个int数组,代表每个元素比他大的下一个元素,若不存在则为-1。保证数组中元素均为正整数。
输入示例:
[11,13,10,5,12,21,3],7
输出示例:
[13,21,12,12,21,-1,-1]
题目分析:
这道题呢,用单调栈来做,从左到右变遍历维护一个单调递减的栈。当栈顶元素小于当前元素时,说明栈顶元素的下一个比它大的数就是当前元素,然后将栈顶元素出栈然后将当前元素赋给它就好啦,最后将当前元素压栈。具体代码如下~
代码实现:
import java.util.*;
public class NextElement {
public int[] findNext(int[] A, int n) {
// write code here
Stack<Integer> stack=new Stack<>();
int[] ret=new int[n];
Arrays.fill(ret,-1);
for(int i=0;i<n;i++){
while(!stack.isEmpty()&&A[stack.peek()]<A[i]){
ret[stack.pop()]=A[i];
}
stack.push(i);
}
return ret;
}
}