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

news/2024/9/22 14:37:06/

链表中的下一个更大节点【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;}
    }
    
    • 复杂度
      • 时间复杂度:O(n)O(n)O(n)
      • 空间复杂度:O(n)O(n)O(n)

http://www.ppmy.cn/news/43093.html

相关文章

【Java Web】015 -- Maven高级(分模块设计与开发、继承与聚合、私服)

目录 一、分模块设计与开发 1、为什么要分模块设计&#xff1f; 2、实践&#xff1a;分模块开发 ①、实现步骤 3、小结 二、继承与聚合 继承 1、继承关系 ①、为什么要在Maven工程中实现继承&#xff1f; ②、继承关系实现 ③、继承实现小结 ④、maven项目父子工程结构说明 2、…

TensorFlow 2.0 快速入门指南:第一部分

原文&#xff1a;TensorFlow 2.0 Quick Start Guide 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【ApacheCN 深度学习 译文集】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 不要担心自己的形象&#xff0c;只关心如何实现…

工资六千的岗位面试了6轮

看到有网友说工资六千的岗位面试了6轮&#xff0c;不禁感慨&#xff0c;这公司的面试流程有多复杂。一个工资六千的岗位需要面试6轮&#xff0c;同时不得不佩服这位求职者毅力和耐心&#xff0c;要是我&#xff0c;估计3次我就觉得多了&#xff0c;工资六千面试需要6次还能够坚…

数据库设计案例

一个专辑可以包含多个曲目&#xff0c;一个曲目只能属于一个专辑 一对多 一个专辑可以包含多条短评&#xff0c;一条短语只能属于一个专辑 一对多 一个用户可以包含多条短评&#xff0c;一个短评只能属于一个用户 一对多 一个专辑可以属于多个用户&#xff0c;一个用户…

〖Python网络爬虫实战⑮〗- pyquery的使用

订阅&#xff1a;新手可以订阅我的其他专栏。免费阶段订阅量1000python项目实战 Python编程基础教程系列&#xff08;零基础小白搬砖逆袭) 说明&#xff1a;本专栏持续更新中&#xff0c;目前专栏免费订阅&#xff0c;在转为付费专栏前订阅本专栏的&#xff0c;可以免费订阅付费…

云原生网络之微隔离

本博客地址&#xff1a;https://security.blog.csdn.net/article/details/130044619 一、微隔离介绍 1.1、微隔离概念 在主体执行动作时&#xff0c;对主体权限和行为进行判断&#xff0c;最常见的是网络访问控制&#xff0c;也就是零信任网络访问&#xff08;ZTNA&#xff…

C语言结构体练习:【通讯录(静态数组简易版)的实现】

全文目录&#x1f600; 前言&#x1f914; 模块和功能划分&#x1f928; 数据类型的选择&#x1f62e; 功能序号类型 enum&#x1f62e; 个人信息类型 PeoInfo&#x1f62e; 通讯录类型 Contact&#x1f635;‍&#x1f4ab; 功能的实现&#x1f644; 初始化通讯录 InitContact…

数字孪生之ThingJS

数字孪生对象层级关系获取对象的方法对象层级关系 获取对象的方法 通过加载事件获取根对象&#xff0c;从而去获取子对象app.on("load", function(ev){var campus ev.campus; // 园区对象集合var buildings campus.buildings; // 建筑对象集合// var building…