当前位置: 首页 > news >正文

LeetCode——2487. 从链表中移除节点

通过万岁!!!

  • 题目:给你一个链表,然后让你从链表中移除一些节点,移除的规则就是我们选择的这个节点在原链表中往右不能有比这个节点大的值。
  • 思路:这个题我最开始以为是双指针,然后找最大值就好了。其实如果给的是数组的话双指针的方法也应该是可以的。但是他给的是一个链表,我们就不太好通过index处理了。其实问题的关键就是我们找到一个地方以后,如何倒推处理前面的。想到倒退,我们其实可以考虑到栈了。我们将满足的条件的元素进行入栈(也就是说,栈内的元素就是临时想要的链表),但是如果我们当前遍历的节点大于栈顶元素,那么栈顶元素就不是我们要找的元素,这时候就要将栈顶元素出栈,栈顶元素会一直出栈,直到栈顶元素的值大于当前节点或者栈顶元素为空,我们就把当前元素入栈。其实还存在一个问题,就是我们最后如何将栈顶元素构建成一个list。这个问题其实我们只要用ret标记栈底元素,然后每次加入元素的时候,都让栈顶元素指向这个元素就好了。如果栈是空的,则直接让ret指向这个元素就好了。最后返回ret。这样就ok了。但是我不太清楚为啥这个思路的时间复杂度不太好。
  • 技巧:栈
class Solution {public ListNode removeNodes(ListNode head) {if (head == null || head.next == null) {return head;}ListNode ret = head;Stack<ListNode> stack = new Stack<>();while (head != null) {if (stack.isEmpty()) {stack.push(head);ret = head;} else {while (!stack.isEmpty() && stack.peek().val < head.val) {stack.pop();}if (!stack.isEmpty()) {stack.peek().next = head;} else {ret = head;}stack.push(head);}head = head.next;}return ret;}
}
  • 总结:这个题还是比较有意思的,里面的小点也是比较多的。主要是如何考虑到用栈来解决这个问题,这一步感觉还是比较关键的,剩下的地方都是锦上添花了。
http://www.lryc.cn/news/275544.html

相关文章:

  • 云原生和Kubernetes如何简化应用程序开发
  • 点云从入门到精通技术详解100篇-基于深度学习的室内场景三维点云语义分割(续)
  • RabbitMQ消息可靠性保证机制3--消费端ACK机制
  • Copilot在Pycharm的应用和示例
  • 搜维尔科技:【简报】第九届元宇宙数字人设计大赛,报名已经进入白热化阶段!
  • 性能检测自动化(含内存泄露检测)
  • iec104和iec61850
  • redis 面试问题 (更新中 ing)
  • 力扣(leetcode)第389题找不同(Python)
  • Linux_源码编译安装LAMP
  • 静态网页设计——清雅古筝网(HTML+CSS+JavaScript)
  • 实战Flink Java api消费kafka实时数据落盘HDFS
  • 爬虫与反爬-localStorage指纹(某易某盾滑块指纹检测)(Hook案例)
  • 聊一聊 webpack 和 vite 的开发服务代理的问题
  • 【鸿蒙4.0】安装DevEcoStudio
  • [概率论]四小时不挂猴博士
  • 算法通关村第二十关-黄金挑战图的常见算法
  • 服务器内存不足怎么办?会有什么影响?
  • GPT实战系列-简单聊聊LangChain
  • 【读书笔记】《白帽子讲web安全》浏览器安全
  • 海外服务器2核2G/4G/8G和4核8G配置16M公网带宽优惠价格表
  • Linux 编译安装 Nginx
  • Oracle文件自动“减肥”记
  • 【csharp】抽象类与接口有哪些不同?什么时候应该使用抽象类?
  • 最新-mybatis-plus 3.5分页插件配置
  • 案例098:基于微信小程序的电子购物系统的设计与实现
  • 亚信安慧AntDB数据库:数字化时代的数据库创新引领者
  • 【MySQL】关于日期转换的方法
  • Ubuntu 虚拟机挂接 Windows 目录
  • 机器学习模型可解释性的结果分析