1019. 链表中的下一个更大节点

单调栈

解题思路

  1. 维护一个单调递减栈,每个元素都与栈顶元素比较,比栈顶元素大则出栈并更新 结果数组

  2. 由于该题是 链表 ,则需要把 索引 都存起来,放入栈中,这样比较的时候,可以更新对应索引的结果;

复杂度

  1. 时间复杂度: O(n),其中 n 是链表的长度;

  2. 空间复杂度: O(n),其中 n 是链表的长度,栈的大小至多为 n

代码实现

var nextLargerNodes = function (head) {
    // 1. 声明一个单调递减的栈
    const stack = [];
    const res = [];
    let inx = 0;

    // 2. 在栈中寻找下一个更大的值
    while (head) {
        while (stack.length && stack[stack.length - 1][0] < head.val) {
            res[stack.pop()[1]] = head.val;
        }
        res[inx] = 0; // 默认值
        stack.push([head.val, inx++]); // 需要将值和索引都存储起来
        head = head.next;
    }

    return res;
};
打赏作者
您的打赏是我前进的动力
微信
支付宝
评论

中午好👏🏻,我是 ✍🏻   疯狂 codding 中...

粽子

这有关于前端开发的技术文档和你分享。

相信你可以在这里找到对你有用的知识和教程。

了解更多

目录

  1. 1. 单调栈
    1. 1.1. 解题思路
    2. 1.2. 复杂度
    3. 1.3. 代码实现