//双单调栈,满足条件进第二个
class Solution {
public int[] secondGreaterElement(int[] nums) {
int n = nums.length;
int[] res = new int[n];
Arrays.fill(res, -1);
// 定义两个单调栈
// 主栈
Deque<Integer> stack1 = new ArrayDeque<>();
// 辅助栈
Deque<Integer> stack2 = new ArrayDeque<>();
for (int i = 0; i < n; i++) {
int current = nums[i];
// 处理辅助栈中可以被当前元素更新的元素
while (!stack2.isEmpty() && nums[stack2.peek()] < current) {
int index = stack2.pop();
res[index] = current;
}
// 从主栈中找到需要移动到辅助栈的元素
Deque<Integer> temp = new ArrayDeque<>();
while (!stack1.isEmpty() && nums[stack1.peek()] < current) {
temp.push(stack1.pop());
}
// 将需要移动的元素从临时栈转移到辅助栈
while (!temp.isEmpty()) {
stack2.push(temp.pop());
}
// 当前索引入主栈
stack1.push(i);
}
return res;
}
}
下一个更大元素 IV
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 496. 下一个更大元素 I[https://leetcode-cn.com/problems/next-grea...
- 摘要 通过取模运算来模拟在数组中循环搜索元素,这比在数组后拼接一个相同数组更方便,空间复杂度更低。 “接雨水”和“...
- 摘要 单调栈方法的时间复杂度是O(n),只需要一层循环遍历一次输入数组,代码更简洁,逻辑更巧妙。 栈内元素从栈顶到...
- 503. 下一个更大元素 II[https://leetcode.cn/problems/next-greater...