AcWing830单调栈
题目:
题目大意:
输出每个数的左边第一个比它小的数。
数据范围:
如图所示
思路:
使用单调栈。当一个数X入栈时,要弹出栈中大于等于它的数。如果找到了第一个比它小的数A,则这个数A就是X左边第一个比它小的数。
代码:
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
Deque<Integer> stack = new ArrayDeque<>();
for (int i = 0; i < n; i ++ ){
int x = scanner.nextInt();
while (!stack.isEmpty() && stack.peek() >= x){
stack.pop();
}
if (!stack.isEmpty()){
System.out.print(stack.peek() + " ");
}else
System.out.print("-1 ");
stack.push(x);
}
}
}
时空复杂度分析等:
-
时间复杂度 : O(n)
-
空间复杂度 : O(n)