【每日一题Day173】LC1019链表中的下一个更大节点 |单调栈

简介: 【每日一题Day173】LC1019链表中的下一个更大节点 |单调栈

链表中的下一个更大节点【LC1019】

给定一个长度为 n 的链表 head

对于列表中的每个节点,查找下一个 更大节点 的值。也就是说,对于每个节点,找到它旁边的第一个节点的值,这个节点的值 严格大于 它的值。返回一个整数数组 answer ,其中 answer[i] 是第 i 个节点( 从1开始 )的下一个更大的节点的值。如果第 i 个节点没有下一个更大的节点,设置 answer[i] = 0

好久没做单调栈

  • 思路
    首先遍历一遍链表,将链表中的元素存储在集合中,然后使用单调递减栈找到严格大于在栈顶元素的下一个元素,当当前元素大于栈顶元素时,将栈顶元素弹出,并记录结果,因此栈中需要记录二元组{下标,值}
  • 实现
class Solution {
    public int[] nextLargerNodes(ListNode head) {
        ListNode cur = head;
        List<Integer> nums = new ArrayList<>();
        while (cur != null){
            nums.add(cur.val);
            cur = cur.next;
        }
        int n = nums.size();
        Deque<int[]> st = new LinkedList<>();
        int[] res = new int[n];
        for (int i = 0; i < n; i++){
            while (!st.isEmpty() && st.peekLast()[1] < nums.get(i)){
                res[st.pollLast()[0]] = nums.get(i);
            }
            st.addLast(new int[]{i, nums.get(i)});
        }
        return res;
    }
}

image.png

目录
相关文章
|
19天前
|
数据安全/隐私保护
第2章 栈、队列、链表
第2章 栈、队列、链表
|
8天前
|
算法
【数据结构与算法 刷题系列】求带环链表的入环节点(图文详解)
【数据结构与算法 刷题系列】求带环链表的入环节点(图文详解)
|
19天前
24. 两两交换链表中的节点
24. 两两交换链表中的节点
|
22天前
|
存储
删除链表的节点
删除链表的节点
10 0
|
24天前
|
存储 SQL 算法
|
24天前
|
SQL 算法 数据挖掘
力扣题目 19:删除链表的倒数第N个节点 【python】
力扣题目 19:删除链表的倒数第N个节点 【python】
|
2月前
【移除链表元素】LeetCode第203题讲解
【移除链表元素】LeetCode第203题讲解
|
24天前
|
存储 SQL 算法
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
|
24天前
|
存储 SQL 算法
LeetCode 题目 86:分隔链表
LeetCode 题目 86:分隔链表
|
28天前
|
存储 算法 Java
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
11 2