下一个更大元素 IV

下一个更大元素 IV

//双单调栈,满足条件进第二个
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;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容