2024.1.3力扣每日一题——从链表中移除节点

2024.1.3

      • 题目来源
      • 我的题解
        • 方法一 递归
        • 方法二 栈
        • 方法三 反转链表
        • 方法四 单调栈+头插法

题目来源

力扣每日一题;题序:2487

我的题解

方法一 递归

当前节点对其右侧节点是否删除无影响,因此可以对其右侧节点进行递归移除。

  • 若当前节点为空,则返回空
  • 若当前不为空,那么先对它的右侧节点进行移除操作,得到一个新的子链表,如果子链表的表头节点值大于该节点的值,那么移除该节点,否则将该节点作为子链表的表头节点,最后返回该子链表。
    以 5,2,13,3,8 为例,递归过程如下图:
    递归示例

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

public ListNode removeNodes(ListNode head) {
   if(head==null){
        return null;
    }
    head.next=removeNodes(head.next);
    // 如果当前比后面的小,这需要删除
    if(head.next!=null&&head.val<head.next.val){
        return head.next;
    }else{
        return head;
    }
}
方法二 栈

使用栈代替递归操作

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

 public ListNode removeNodes(ListNode head) {
        ListNode root=null;
        ListNode p=head;
        Deque<ListNode> stack=new LinkedList<>();
        while(p!=null){
            stack.push(p);
            p=p.next;
        }
        while(!stack.isEmpty()){
            if(root==null||stack.peek().val>=root.val){
                stack.peek().next=root;
                root=stack.peek();
            }
            stack.pop();
        }
        return root;
    }
方法三 反转链表

直接先翻转整个链表,问题就变成保留大于等于左侧节点的节点

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

public ListNode removeNodes(ListNode head) {
       head=reverse(head);//先翻转整个链表
       ListNode p=head;
       while(p.next!=null){
           if(p.val>p.next.val){//当前节点大于右侧节点,右侧节点需要移除
               p.next=p.next.next;
           }else{
               p=p.next;
           }
       }
       return reverse(head);

    }
    //反转链表
    public ListNode reverse(ListNode head){
        ListNode root=new ListNode(-1);
        ListNode p=head;
        while(p!=null){
            ListNode nxt=p.next;
            p.next=root.next;
            root.next=p;
            p=nxt;
        }
        return root.next;
    }
方法四 单调栈+头插法

先使用单调增栈存储最终需要留下的节点,然后使用头插的方式将这些节点连接起来

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

public ListNode removeNodes(ListNode head) {
        ListNode root=new ListNode(-1);
        Deque<ListNode> stack=new LinkedList<>();
        ListNode p=head;
        //使用单调增栈存储最终需要留下的节点
        while(p!=null){
            while(!stack.isEmpty()&&stack.peek().val<p.val){
                stack.pop();
            }
            stack.push(p);
            p=p.next;
        }
        //使用头插的方式将这些节点连接起来
        while(!stack.isEmpty()){
            ListNode cur=new ListNode(stack.pop().val);
            cur.next=root.next;
            root.next=cur;
        }
        return root.next;
    }

有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/301125.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ElasticSearch 性能优化

提升写入性能 使用 bulk 接口批量写入 节省重复创建连接的网络开销通过进行基准测试来找到最佳的批处理数量 延长 refresh 的时间间隔 通过延长 refresh&#xff08;刷新&#xff09;的时间间隔可以降低段合并的频率&#xff0c;段合并十分耗费资源默认的刷新频率为1s&…

论文阅读记录SuMa SuMa++

首先是关于SuMa的阅读&#xff0c;SuMa是一个完整的激光SLAM框架&#xff0c;核心在于“基于面元(surfel)”的过程&#xff0c;利用3d点云转换出来的深度图和法向量图来作为输入进行SLAM的过程&#xff0c;此外还改进了后端回环检测的过程&#xff0c;利用提出的面元的概念和使…

LeetCode-加一(66)

题目描述&#xff1a; 给定一个由整数组成的非空数组所表示的非负整数&#xff0c;在该数的基础上加一。 最高位数字存放在数组的首位&#xff0c; 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外&#xff0c;这个整数不会以零开头。 思路&#xff1a; 这里主要分…

java 生成一个当前时间的时间搓

开发过程中 用时间搓数值格式存储 会更加精准 那么 我们在一些日常增删查改中就可以用时间搓来记录操作时间 就一行代码 long timestamp System.currentTimeMillis();他就能生成当前时间的时间搓 运行结果如下 然后 我们可以在 http://shijianchuo.wiicha.com/ 上进行转换查…

自动驾驶apollo9.0 Dreamview Debug方法

Apollo 9.0 安装&编译方法 # 拉取源码 git clone gitgithub.com:ApolloAuto/apollo.git git checkout v9.0.0# 启动docker bash docker/scripts/dev_start.sh bash docker/scripts/dev_into.sh# 编译project ./apollo.sh build默认启动方式 default mode wget https:…

QT:单例

单例的定义 官方定义&#xff1a;单例是指确保一个类在任何情况下都绝对只有一个实例&#xff0c;并提供一个全局访问点。 单例的写法 抓住3点&#xff1a; 构造函数私有化&#xff08;确保只有一个实例&#xff09;提供一个可以获取构造实例的接口&#xff08;提供唯一的实…

Nginx 搭建可道云网盘

目录 1.安装php-fpm 2. 建站点根目录与配置 2.1 建站点根目录 2.2 配置 3. 搭建成功 1.安装php-fpm nginx 需要使用php 需要安装php-fpm yum install php-fpm php-mbstring php-mysqlnd php-gd -y 修改 www.conf 文件的配置29行和41行&#xff0c;将用户会让用户组改成n…

Python笔记07-异常、模块和包

文章目录 异常及捕获方法python模块python包安装第三方包 异常及捕获方法 当检测到一个错误时&#xff0c;Python解释器就无法继续执行了&#xff0c;反而出现了一些错误的提示&#xff0c;这就是所谓的“异常”, 也就是我们常说的BUG 例如&#xff1a;以r方式打开一个不存在的…

NI基于PC的测量和控制系统

基于PC的测量和控制系统为工程师提供了电气和物理测量功能&#xff0c;使其能够以可自定义、准确且经济实惠的方式进行台式测量. 什么是基于PC的测量和控制系统&#xff1f; 在基于PC的测量和控制系统中&#xff0c;NI硬件产品通过USB或以太网连接到PC或笔记本电脑。这种系统具…

mysql高可用方案之MHA

mysql集群高可用方案&#xff1a; 单主&#xff1a;keepalived、MHA、MMM 多主&#xff1a;MySQL cluster 、PXC MHA的工作原理 MHA node 运行在每台MySQL服务器上&#xff0c;MHA Manager会定时探测集群中的master节点&#xff0c;当master出现故障时&#xff0c;它可以自…

C语言.不同数据类型之间相互赋值_强制类型转换_非强制类型转换

不同数据类型之间相互赋值 这个问题是 C/c的&#xff0c;Java 等其他语言会报错&#xff0c;这里不会报错 当 int i2147483647;时&#xff0c;可以正常输出。 当 int i2147483648;时会变成-2147483648。 在大多数现代计算机系统中&#xff0c;整数通常采用补码表示法。这意味着…

【Emgu.CV教程】2.13、基本方法之MinMaxLoc()最大值最小值查找

我们可以简单的把图像看成是一个矩阵&#xff0c;图像算法就转换成对这个矩阵的各种操作&#xff0c;比如加减乘除、矩阵转置、归一化等等&#xff0c;这样对以后的函数理解会更直观。 在图像分割、颜色处理过程中&#xff0c;经常需要统计出图像内的最大值、最小值&#xff0c…

详解Java中@Accessors注解(全)

目录 前言1. 概念2. 属性2.1 fluent属性2.2 chain属性2.3 prefix属性 前言 关于该注解的学习&#xff0c;主要来源项目中涉及&#xff0c;对此进行查漏补缺 Accessors 注解通常用于简化实体类的代码&#xff0c;使其更加简洁和易读。 1. 概念 Accessors 是 Lombok&#xff…

快手面经总结(2024最新)

快手 面经1-一面 开始先是手撕算法两道 自我介绍两道手撕 将字符串转化为整数 (这里当时出现溢出值问题&#xff0c;进行了思考解决&#xff0c;写了两种方式)synchronize &#xff0c; 可以使用的几种形式&#xff0c;代码写出 操作系统 和 数据结构 hash解决冲突 &#xff…

【认知计算】《智能追踪》

故事背景科技相关&#xff1a; 认知计算 意在使计算机系统能够像人的大脑一样学习、思考&#xff0c;并做出正确的决策。 模仿大脑从经验中学习&#xff0c;发现不同事物之间的联系&#xff0c;进而实现逻辑推理和记忆等功能。 认知计算是一种类脑计算模式&#xff0c;源自模…

我的创作纪念日——redis的历史纪录

机缘 最开始只想存留点Redis的操作信息&#xff0c;后来写着写着也就写多了&#xff0c;虽然后面很长时间由于忙就没继续写&#xff0c;但是还是偶尔登录看一下&#xff0c;有好几篇文章的浏览量还是很多的呢。 收获 收获不多&#xff0c;粉丝也才三十多个&#xff0c;浏览量感…

html 原生网页使用ElementPlus 日期控件el-date-picker换成中文

项目&#xff1a; 原生的html,加jQuery使用不习惯&#xff0c;新html页面导入vue3,element plus做界面&#xff0c;现在需要把日历上英文切成中文。 最终效果&#xff1a; 导入能让element plus日历变成中文脚本&#xff1a; elementplus, vue3对应的js都可以通过创建一个vu…

修改 docker /dev/shm 的大小

修改 docker /dev/shm 的大小 1&#xff0c;获取完整id&#xff1a; docker inspect 245| grep Id rootlynxi:~# docker inspect 245| grep Id"Id": "245ab167ed9a79873b31b3a38df2053870fe72f267c3c1a660df25c63e37e88b",2&#xff0c;修改 ShmSize&…

vueRouter 配合 keep-alive 不生效的问题

文章目录 问题说明案例复现demo 结构问题复现和解决 其实这个不生效的问题根本也不算一个问题&#xff0c;犯的错和写错单词差不多&#xff0c;但是也是一时上头没发现&#xff0c;所以记录一下&#xff0c;如果遇到同样的问题&#xff0c;也希望可以帮助你早点看到这个哭笑不得…

网络技术基础入门全套实验-厦门微思网络CCNA实验手册

知识改变命运&#xff0c;技术就是要分享&#xff0c;有问题随时联系&#xff0c;免费答疑&#xff0c;欢迎联系&#xff01; 微思简介&#xff08;https://www.xmws.cn) 微思成立于2002年&#xff0c;是一个诚信敬业、积极向上、充满活力、专注技术服务的企业。 微思获得了八…