java
public int[] monoStack(int[] nums){
int n=nums.length;
int[] ret=new int[n];
Arrays.fill(ret,-1);
Deque<Integer> stack=new ArrayDeque<>();
//存下标
for(int i=0;i<n;i++){
while(!stack.isEmpty()&&nums[i]>nums[stack.peek()]){
int top=stack.pop();
//top 被弹出元素
//i 右边界
//stack.peek() 左边界
ret[top]=?;
}
stack.push(i);
}
return ret;
}
单调栈专门解决"对每个元素,找它旁边第一个比它大/小的元素"这类问题------暴力是 O(n²) 的两层循环,单调栈把它压到 O(n)。