学习了一下单调栈,可以分为单调递增获取递减,就是判断当前值是否大于或者小于下一个值
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;
}
}
这篇博客介绍了如何利用单调栈解决数组中寻找单调递增或递减子序列的问题。示例代码展示了如何在Java中实现这个算法,遍历数组并维护一个单调栈,找出每个元素的前一个递增或递减元素的索引。
5173

被折叠的 条评论
为什么被折叠?



