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

news/2024/11/8 9:31:31/

题目链接

Leetcode.1019 链表中的下一个更大节点 Rating : 1571

题目描述

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

对于列表中的每个节点,查找下一个 更大节点 的值。也就是说,对于每个节点,找到它旁边的第一个节点的值,这个节点的值 严格大于 它的值。

返回一个整数数组 answer,其中 answer[i]是第 i 个节点( 从1开始 )的下一个更大的节点的值。如果第 i 个节点没有下一个更大的节点,设置 answer[i] = 0

示例 1:

在这里插入图片描述

输入:head = [2,1,5]
输出:[5,5,0]

示例 2:

在这里插入图片描述

输入:head = [2,7,4,3,5]
输出:[7,0,5,5,0]

提示:

  • 链表中节点数为 n
  • 1<=n<=1041 <= n <= 10^41<=n<=104
  • 1<=Node.val<=1091 <= Node.val <= 10^91<=Node.val<=109

解法:单调栈

对于每一个结点 nodenodenode ,我们考虑 它 是哪些结点的 下一个更大的结点

在这里插入图片描述

对于 结点yyy来说,它是 结点x1,x2,x3,x4x1,x2,x3,x4x1,x2,x3,x4下一个更大节点。当我们把结点x1,x2,x3,x4x1,x2,x3,x4x1,x2,x3,x4的下一个更大结点记录下来之后,这些结点就没用了,我们就可以把它们弹出去。

所以我们实际上维护的是一个 底大顶小的单调栈。当我们弹出栈顶元素的时候,就对每一个位置的下一个最大节点做更新。为了方便更新,我们需要记录下标。

时间复杂度: O(n)O(n)O(n)

C++代码:

using PII = pair<int,int>;class Solution {
public:vector<int> nextLargerNodes(ListNode* head) {vector<int> ans;//节点值 和 对应得下标stack<PII> stk;while(head != nullptr){while(!stk.empty() && stk.top().first < head->val){ans[stk.top().second] = head->val;stk.pop();}stk.emplace(head->val,ans.size());ans.push_back(0);head = head->next;}return ans;}
};

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

相关文章

Unity3D: Mesh切割算法详解

Unity3D是一款非常流行的游戏开发引擎&#xff0c;支持多种平台和多种语言。在Unity3D中&#xff0c;Mesh是游戏中最常用的3D模型表示方法&#xff0c;它由一系列的点、线、面组成。在游戏中&#xff0c;我们经常需要对Mesh进行一些特殊的操作&#xff0c;比如切割&#xff0c;…

《Advanced R》学习笔记 | Chapter2 Names and values

专注系列化、高质量的R语言教程推文索引 | 联系小编 | 付费合集Advanced R是R语言大神Hadley Wickham写的一本书&#xff0c;主要介绍R语言底层的运行原理&#xff0c;帮助用户从R User转变为R Programmer。该书最新版为第二版&#xff0c;网页版地址为&#xff1a;https://adv…

AD GND整体做铺铜

在机械一层Mechanical 选择边框全选 层属性变更 发现问题。铜皮于边框太近了 解决

网络中的一些基本概念

组建网络的重要设备 集线器,交换机(组建局域网,不能跨局域网组建网络),路由器(wifi本质上是无线路由器,路由器的本质的把俩个局域网给连起来) 网络通信的一些基础概念 IP地址 标识了网络设备所在的位置 端口号 标识了一个具体的应用程序 协议 协议是网络通信的概念,约定好…

使用开发者工具等跳过付费墙

使用开发者工具等方法跳过付费墙 参考于&#xff1a; https://bbarrows.com/posts/how-to-get-around-paywalls-with-debug-tools Everyone Hates Paywalls 每个人都讨厌付费墙 像csdx网站&#xff0c;不登录看不到之后的内容 下面是一些方法跳过付费墙 (1) 视图滚动 Chrome…

TypeScript(八)装饰器

目录 前言 定义 类装饰器 基本用法 操作方式 操作类的原型 类继承操作 方法装饰器 属性装饰器 存取器装饰器 参数装饰器 基本用法 参数过滤器 元数据函数实现 参数过滤 效果实践 装饰器优先级 相同装饰器 不同装饰器 装饰器工厂 hooks与class兼容 结语 …

利用多专家模型解决长尾识别任务

来源&#xff1a;投稿 作者&#xff1a;TransforMe 编辑&#xff1a;学姐 贡献 提出了RoutIng Diverse Experts&#xff08;RIDE&#xff09;&#xff0c;不仅可以减少所有类别的variance&#xff0c;并且还可以减少尾部类的bias。同时提升了头部和尾部的性能。 思路 目前存…

linux0.12-3-4

71–3.4-C与汇编程序的相互调用 71–3.4.1-C函数调用机制 76–3.4.2-在汇编程序中调用C函数 78–3.4.3-在C程序中调用汇编函数 3-4 C语言和汇编相互调用的 原因&#xff1a;为了效率&#xff0c;C语言和汇编之间会相互调用。 3-4-1 C函数调用 head.s如何跳转到main.c? 我们先…