代码随想录算法训练营第四天

2023-11-09

LeetCode 24力扣​  ​​​​​

两两交换链表节点,采用原地交换,使用tmp节点进行交换前临时节点存储即可(三个一组)

package algor.trainingcamp;

import algor.junior_algor.list.ListNode;

/**
 * @author lizhe
 * @version 1.0
 * @description: 两两交换链表中的节点
 *
 * 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
 * @date 2023/4/8 13:32
 */
public class LeetCode24 {
    /**
     * 先将原节点全部保存下来 然后进行赋值即可,以三个节点为一组
     */
    public ListNode swapPairs(ListNode head) {
        ListNode dummyHead = new ListNode(-1);
        dummyHead.next = head;

        ListNode cur = dummyHead;

        while(cur.next != null && cur.next.next != null){
            /**
             * 将 dummy -> 1 ->2 变成了 dummy -> 2 -> 1
             */
            ListNode temp1 = cur.next;
            ListNode temp2 = cur.next.next;
            ListNode temp3 = cur.next.next.next;


            cur.next = temp2;
            cur.next.next = temp1;
            cur.next.next.next = temp3;
            cur = cur.next.next;
        }

        return dummyHead.next;
    }
}

 

LeetCode19力扣

删除倒数第n个节点,先找到待删除节点的前一个,进行操作即可

package algor.trainingcamp;

import algor.junior_algor.list.ListNode;

/**
 * @author lizhe
 * @version 1.0
 * @description: 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
 * @date 2023/4/8 13:52
 */

/**
 * 如何找到倒数第n个节点的前一个位置,进行删除
 * 快慢指针从dummy开始,首先快指针向后移动n位,然后快慢一起移动,慢指针就到了待删除节点的前一个位置
 */
public class LeetCode19 {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode dummyHead = new ListNode(-1);
        dummyHead.next = head;

        ListNode slow = dummyHead;
        ListNode fast = dummyHead;

        for(int i = 0;i < n;i++){
            fast = fast.next;
        }

        while(fast.next != null){
            slow = slow.next;
            fast = fast.next;
        }

        slow.next = slow.next.next;
        return dummyHead.next;
    }
}

 

面试02.07 力扣

找出两个单链表的相交起始节点,相当于将一个节点的尾链接上另外一个节点的头部,然后进行遍历,如果有重合点,一定相交

package algor.trainingcamp;

import algor.junior_algor.list.ListNode;

/**
 * @author lizhe
 * @version 1.0
 * @description: https://leetcode.cn/problems/intersection-of-two-linked-lists-lcci/
 * @date 2023/4/8 14:02
 *
 * 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。
 */

/**
 * 思路: 假设a链表长度为a b链表长度为b,ab链表的公共部分长度为c
 *
 * 遍历a链表之后再开始遍历b链表,到达尾部时候共走了 a + b - c 步数
 * 遍历b链表之后再开始遍历a链表, 到达尾部时候共走了 b + a - c 步数
 *
 * 如果两个链表相交,一定有重合点 此时指向了公共交点
 * 如果两个链表不相交 则返回空
 */
public class LeetCode0207 {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        ListNode curA = headA;
        ListNode curB = headB;

        /**
         * 刻意多往后遍历了一次,为了返回null
         */
        while(headA != headB){
            curA = curA != null ? curA.next : curB;
            curB = curB != null ? curB.next : curA;
        }

        return curA;
    }
}

 

LeetCode142 力扣

判断链表的成环点,具体的公式推导 在注释中,之前看过这道题,理解的第一次相遇后使用同样步长一个从相遇点走,一个从头走,距离一样(a == c)其实是错误的,a和c是有一定关系的(a = (n - 1)(c + b) + c ) c+b的整数倍刚好是一个环的长度。因此才最终会到成环点

package algor.trainingcamp;

import algor.junior_algor.list.ListNode;

/**
 * @author lizhe
 * @version 1.0
 * @description: https://leetcode.cn/problems/linked-list-cycle-ii/
 * @date 2023/4/8 14:29
 *
 * 判断链表是否有环,及环
 *
 * 假设 从链表的头 到 链表成环点距离为a,链表成环点到相遇点距离为b 相遇点到链表成环点距离为c
 *
 * 当相遇时
 * 则 慢指针走的路程为  a + b
 * 快指针为 a + b + c + b + c + b... a + b + n(c + b)[n >= 1]
 * 如若快指针是慢指针速度的两倍 a + b + n(c + b) = 2(a + b) => 可以化简为 a = (n - 1)(c + b) + c
 *
 * !!!!
 * (n - 1)(c+b)已经是整个环的距离了,假设一个节点从相遇点出发,一个节点从原点出发,按照相同的速度,最终依旧会在成环点碰面,
 * 可能是一个点走了 a到达了成环点,另外一个点走了 (n - 1)(c + b) + c,最终也是会到达成环点
 */
public class LeetCode142 {
    public ListNode detectCycle(ListNode head) {
        ListNode slow = head;
        ListNode fast = head;
        //fast != null 考虑节点不成环的情况
        while(fast != null && fast.next != null){
            fast = fast.next.next;
            slow = slow.next;

            if(fast == slow){
                slow = head;
                while(fast != slow){
                    slow = slow.next;
                    fast = fast.next;
                }
                return slow;
            }
        }

        return null;
    }
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

代码随想录算法训练营第四天 的相关文章

  • Open3D 基于法线的双边滤波

    目录 一 算法原理 1 算法概述 2 计算步骤 3 参考文献 二 代码实现 三 结果展示 1 原始点云 2 滤波结果 四 相关链接 一 算法原理 1 算法概述 Fleishman 等人提出一种网格双边滤波器 双边滤波器最早应用于灰度图像 该
  • Linux下挂在SATA硬盘时的诡异现象

    ata1 SATA link down SStatus 1 SControl 300 ata1 EH complete ata1 exception Emask 0x10 SAct 0x0 SErr 0x4000000 action 0xa
  • Windows下配置Mask-RCNN环境(各种踩过的坑)

    Windows下配置Mask RCNN pytorch环境 各种踩过的坑 安装Anaconda 1 1 下载和安装Anaconda 安装maskrcnn benchmark项目 2 1 官方建议的安装需求 2 2 逐步安装过程 1 创建虚拟
  • TCP通讯客户端怎样判断与服务器端断开,该如何处理

    TCP通讯客户端怎样判断与服务器端断开 大虾们 神们 C winform里面 采用多线程监听端口 接收方式为阻塞式 创建单一线程进行监听函数 这样阻塞时只阻塞单一线程 对主线程没有影响 并使用异步通信模式 来一个连接后回调函数进行解析入库
  • 动态修改模板字符串中图片--简单解决

    document addEventListener error function e var elem e target if elem id toLowerCase imgurl infowindow 在这内部可以发请求拿到动态的地址 i
  • IP地址,子网掩码、默认网关,DNS的设置和工作原理(总结)

    概念 1 概述 IP地址 人们在Internet上为了区分数以亿计的主机而给每台主机分配的一个专门的地址 通过IP地址就可以访问到每台主机 子网掩码 不能单独存在 它必须结合IP地址一起使用 子网掩码只有一个作用 就是将某个IP地址划分成网
  • Blender教程之魔方全自动特效教学

    魔方玩家在我看来分为三种 一是不懂原理的佛系玩家 三阶魔方可能都要拧很久才能还原 第二种是明白怎么玩的玩家 其实还原一个被打乱的魔方就是做一道层先法的数学题 而第三种就是像我这样虽然不懂解密 但会用Blender做一个魔方来让它 自动还原

随机推荐

  • Android Bluetooth

    Android Bluetooth 使用Android蓝牙API来进行蓝牙通信的四个任务 设置蓝牙 检索周围匹配的或者可用的设备 连接设备 设备间传输数据 所有蓝牙APIs在android bluetooth 包中 创建蓝牙连接所要用到的类
  • 一、人脸识别starter-需求分析

    一 需求来源 对于一些需要本人刷脸认证的场景 比如注册时需要刷脸认证 要求上传身份证必须是本人的 等此场景 二 需求分析 考虑到这是个单独并且可复用的模块 所以决定写一个springboot starter来实现 starter可以上传到自
  • 定位、浮动

    Position 定位 一 position 1 属性描述 设置或获取元素的定位方式 2 版本变更 有 3 语法模板 position static relative absolute fixed 4 默认值 static 尽量避开影响其他
  • C++编译知识笔记(一)——基本知识

    文章目录 一 编译的基本步骤 1 1 预处理阶段 1 2 编译阶段 1 3 汇编阶段 1 4 链接阶段 二 核心常用基本概念 2 1 o目标文件 2 2 符号 2 3 静态链接库 2 4 动态链接库 三 链接和加载 3 1 o文件和静态库的
  • python 内置函数——enumerate( )函数

    发音 nu m re t 枚举 列举 enumerate 是python的内置函数 适用于python2 x和python3 x 用来将一个可迭代对象转化为枚举对象 利用它可以同时获得每个元素的索引下标和值 即需要 index 和 valu
  • Ueditor富文本编辑器客制化功能添加

    文章目录 ueditor简介 主要配置文件 要实现的功能展示 实现过程 修改 ueditor all js 配置页面的内容 setcellattribute html 添加多语言配置 添加CSS样式 ueditor css 开放属性白名单
  • Say0l的安全开发-弱口令扫描工具-My-crack【红队工具】

    写在前面 终于终于 安全开发也练习一年半了 有时间完善一下项目 写写中间踩过的坑 安全开发的系列全部都会上传至github 欢迎使用和star 工具链接地址 https github com SAY0l my crack 预览 My Cra
  • 【GD32F427开发板试用】USB FS 键盘

    本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动 更多开发板试用活动请关注极术社区网站 作者 Charles 一 试用介绍 GD32F427RK支持USBFS和USBHS 我试用的是USBFS功能 所以在此只关注FS相关特
  • Python常考基础面试题

    文章目录 Python基础面试题 1 Python 数据结构有哪些 2 Python 中列表和元组的区别是什么 元组是不是真的不可变 3 什么是生成器和迭代器 它们之间有什么区别 迭代器 生成器 4 什么是闭包 装饰器又是什么 装饰器有什么
  • [心得]python pip私人库安装部署经验总结

    背景 pip打包 setuptools pip支持从wheel安装 卸载 依赖覆盖 列出已装的包 以及pep438过渡发布 而easy install则支持egg安装 修改系统路径 多版本安装 egg 是一个包含所有包数据的文件包 在理想情
  • 利用lineRender画射线

    using System Collections using System Collections Generic using UnityEngine public class makeRay MonoBehaviour private L
  • matplotlib学习笔记(二)

    上面简单学习了如何绘制一个折线图 总觉得这个折线图特别的丑 下面对图形进行下装饰 1 深入一点学习plt plot plt plot x y color marker linestyle color 线条颜色 可以设置为颜色名称 如 red
  • linux工具——PPTP搭建及配置

    简介 安装 配置 客户端配置 1 安装软件包 yum install y ppp pptp pptp setup 2 运行 pptpsetup create test server IP username 用户 password 密码 en
  • mybatis查询结果按sql字段顺序返回。

    1 返回结果用resutlType接受 resultType java util LinkedHashMap 2 mybatis plus增加如下配置 mybatis plus configuration call setters on n
  • 个人python笔记

    个人PYTHON记录 更新中 前言 一 个人对python及C uibot的评价 二 python使用包与函数的记录 1 环境的配置anaconda与pycharm 2 py打包为exe 3 excel表格相关包xlwings 4 re正则
  • 根据ID获取问题

    定义接口 根据问题的ID查询一个问题数据 Question getQuestionById Integer id 实现接口 Override public Question getQuestionById Integer id select
  • Web基础知识

    为啥我啥都不知道 在计算机网络技术中 通常涉及两张网 Network和Web Network 主要指硬件网络 包括了TCP IP Transmission Control Protocol Internet Protocol 四层网络体系中
  • tf.nn.conv2d() 参数说明

    tf nn conv2d用法详解 tf nn conv2d 我们已经知道这个函数是用于做二维卷积的 但是他容易和tf layers conv2d 混淆 对于初学者来说 他的参数也不是那么容易理解 只是了解到一点皮毛 并不能一下子就记住 下面
  • Java测试(7)---项目篇

    需求 项目 1 项目启动 了解项目背景 2 需求分析 功能需求 1 文件类型 支持所有文件 2 压缩文件个数 最多压缩100个文件 3 压缩大小 不超过5G 性能需求 1 压缩 解压缩文件不超过30分钟 2 安全需求 带有病毒感染的文件不能
  • 代码随想录算法训练营第四天

    LeetCode 24力扣 两两交换链表节点 采用原地交换 使用tmp节点进行交换前临时节点存储即可 三个一组 package algor trainingcamp import algor junior algor list ListNo