学习了一下单调栈,可以分为单调递增获取递减,就是判断当前值是否大于或者小于下一个值
import java.util.Arrays;
import java.util.Stack;
/**
* @author xienl
* @description 单调栈
* @date 2022/7/11
*/
public class Solution {
public static void main(String[] args) {
Solution solution = new Solution();
int[] arr = {3,4,1,5,6,2,7};
int[][] ints = solution.foundMonotoneStack(arr);
for (int[] anInt : ints) {
System.out.println(Arrays.toString(anInt));
}
}
public int[][] foundMonotoneStack (int[] nums) {
int n = nums.length;
int[][] res = new int[n][2];
for (int[] re : res) {
Arrays.fill(re, -1);
}
Stack<Integer> stack = new Stack<>();
for (int i = 0; i < n; i++){
if (stack.isEmpty()){
stack.push(i);
continue;
}
// 下一个数比当元素小
while (!stack.isEmpty() && nums[stack.peek()] > nums[i]){
res[stack.peek()][1] = i;
stack.pop();
}
stack.push(i);
}
stack.clear();
for (int i = n - 1; i >= 0; i--){
if (stack.isEmpty()){
stack.push(i);
continue;
}
while (!stack.isEmpty() && nums[stack.peek()] > nums[i]){
res[stack.peek()][0] = i;
stack.pop();
}
stack.push(i);
}
return res;
}
}