算法训练营day04

一、24. 两两交换链表中的节点

题目链接:https://leetcode.cn/problems/swap-nodes-in-pairs/description/
文章讲解:https://programmercarl.com/0024.%E4%B8%A4%E4%B8%A4%E4%BA%A4%E6%8D%A2%E9%93%BE%E8%A1%A8%E4%B8%AD%E7%9A%84%E8%8A%82%E7%82%B9.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE
视频讲解:https://www.bilibili.com/video/BV1YT411g7br

1.1 初见思路

  • 虚拟头节点
  • 三个一组
  • 需返回头节点,所以需要暂存虚拟头节点

1.2 具体实现

1.2.1 方式一:虚拟头节点

class Solution {public ListNode swapPairs(ListNode head) {if(head==null){return null;}ListNode pHead = new ListNode();pHead.next = head;ListNode pre = pHead;ListNode n1=head;ListNode n2 = head.next;ListNode nextH = null;while(n1!=null && n2!=null){nextH = n2.next;pre.next=n2;n2.next=n1;n1.next=nextH;pre=n1;n1=nextH;if(n1==null){break;}else{n2=n1.next;}}return pHead.next;}
}

1.2.2 方式二:递归

// 递归版本
class Solution {
public ListNode swapPairs(ListNode head) {// base case 退出提交if(head == null || head.next == null) return head;// 获取当前节点的下一个节点ListNode next = head.next;// 进行递归ListNode newNode = swapPairs(next.next);// 这里进行交换next.next = head;head.next = newNode;return next;}} 

1.3 重难点

  • 这里的递归写法应该掌握一下,简单清晰
  • 虚拟头结点主要是注意空指针异常的问题

二、 19. 删除链表的倒数第 N 个结点

题目链接:https://leetcode.cn/problems/remove-nth-node-from-end-of-list/description/
文章讲解:https://programmercarl.com/0019.%E5%88%A0%E9%99%A4%E9%93%BE%E8%A1%A8%E7%9A%84%E5%80%92%E6%95%B0%E7%AC%ACN%E4%B8%AA%E8%8A%82%E7%82%B9.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE
视频讲解:https://www.bilibili.com/video/BV1vW4y1U7Gf

2.1 初见思路

这个题做了很多遍了,快慢指针,不算难

2.2 具体实现

class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {ListNode pre= new ListNode();pre.next=head;ListNode fast = pre;ListNode cur = pre;for (int i = 0; i <= n; i++) {fast = fast.next;}while(fast!=null){cur=cur.next;fast=fast.next;}if(cur.next!=null){cur.next = cur.next.next;}return pre.next;}
}

2.3 重难点

  • 快慢指针
  • 用虚拟头节点,同时慢指针也从虚拟头节点开始,这样能方便删除点位

三、 面试题 02.07. 链表相交

题目链接:https://leetcode.cn/problems/intersection-of-two-linked-lists-lcci/description/
文章讲解:https://programmercarl.com/0027.%E7%A7%BB%E9%99%A4%E5%85%83%E7%B4%A0.html
视频讲解:https://www.bilibili.com/video/BV12A4y1Z7LP

3.1 初见思路

  1. 计算两条链表长度差值k
  2. 两个链表各自一个指针,长链表指针先移动k
  3. 然后两个指针再一起移动,看是否有相同的节点

3.2 具体实现

public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {int sizeA=0;int sizeB=0;ListNode tA = headA;ListNode tB = headB;ListNode curA = headA;ListNode curB = headB;while(tA!=null){sizeA++;tA=tA.next;}while(tB!=null){sizeB++;tB=tB.next;}if(sizeA>sizeB){int diff = sizeA-sizeB;//A队列指针先移动difffor(int i=0;i<diff;i++){curA=curA.next;}}else{int diff=sizeB-sizeA;for(int i=0;i<diff;i++){curB=curB.next;}}while(curA!=null && curB!=null){if(curA==curB){return curA;}else{curA=curA.next;curB=curB.next;}}return null;}
}

3.3 重难点

四、 142.环形链表II

题目链接:https://leetcode.cn/problems/linked-list-cycle-ii/description/
文章讲解:https://programmercarl.com/0027.%E7%A7%BB%E9%99%A4%E5%85%83%E7%B4%A0.html
视频讲解:https://www.bilibili.com/video/BV12A4y1Z7LP

4.1 初见思路

  • 判断是否成环,用快慢指针即可
  • 如何找到环的入口,需要用到初中数据的知识

4.2 具体实现

public class Solution {public ListNode detectCycle(ListNode head) {ListNode slow = head;ListNode fast = head;while (fast != null && fast.next != null) {slow = slow.next;fast = fast.next.next;if (slow == fast) {// 有环ListNode index1 = fast;ListNode index2 = head;// 两个指针,从头结点和相遇结点,各走一步,直到相遇,相遇点即为环入口while (index1 != index2) {index1 = index1.next;index2 = index2.next;}return index1;}}return null;}
}

4.3 重难点

  • 如何判断入口

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国产操作系统上Vim的详解03--使用Vundle插件管理器来安装和使用插件 _ 统信 _ 麒麟 _ 中科方德

原文链接&#xff1a;国产操作系统上Vim的详解03–使用Vundle插件管理器来安装和使用插件 | 统信 | 麒麟 | 中科方德 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇在国产操作系统上使用Vundle插件管理器来安装和使用Vim插件的详解文章。Vundle是Vim的一款强大的插…

【数据可视化系列】使用Python和Seaborn绘制相关性热力图

热力图&#xff08;Heatmap&#xff09;是一种数据可视化工具&#xff0c;它通过使用颜色的深浅来展示数据矩阵中数值的大小或密度。在热力图中&#xff0c;每种颜色的深浅代表数据的一个特定值或值的范围&#xff0c;通常使用红色、黄色和绿色等颜色渐变来表示数据的热度&…

【TB作品】MSP430F5529 单片机,数字时钟设计与实现,整点时通过蜂鸣器播放音乐进行报时

基于单片机的数字时钟设计与实现 作品名称 基于MSP430单片机的OLED显示数字时钟 作品功能 本作品实现了一个具有时间显示和整点报时功能的数字时钟。通过OLED屏幕显示当前时间&#xff0c;用户可以通过按键设置时间&#xff0c;并在整点时通过蜂鸣器播放音乐进行报时。 作…

MySQL JDBC编程

前言&#x1f440;~ 上一章我们介绍了数据库的索引与事务&#xff0c;本章节我们介绍JDBC编程&#xff0c;使用java代码和数据库打交道 如果各位对文章的内容感兴趣的话&#xff0c;请点点小赞&#xff0c;关注一手不迷路&#xff0c;如果内容有什么问题的话&#xff0c;欢迎各…

双指针算法题笔记

1、移动零 class Solution {public void moveZeroes(int[] nums) {int left0;int right0;for(right0;right<nums.length;right){if(nums[right]!0){if(nums[left]0){int tempnums[left];nums[left]nums[right];nums[right]temp;}left;}}} } 两个指针将一个数组划分三个部分&…

使用OpenPCDet训练与测试多传感器融合模型BEVFusion,OPenPCdet代码架构介绍

引言 在自动驾驶领域&#xff0c;多传感器融合技术是一种常见的方法&#xff0c;用于提高感知系统的准确性和鲁棒性。其中&#xff0c;BevFusion是一种流行的融合方法&#xff0c;可以将来自不同传感器的数据进行融合&#xff0c;生成具有丰富信息的鸟瞰图&#xff08;BEV&…

探索800G数据中心的高速布线解决方案

随着技术的快速进步&#xff0c;数据中心正以前所未有的速度迅速发展。虽然100G和400G数据中心已经普及&#xff0c;但800G数据中心正逐渐流行并展现出增长趋势。由于对高速数据传输的需求呈指数级增长&#xff0c;因此需要高效、可靠的线缆连接解决方案。本文将介绍800G数据中…

Cell-在十字花科植物中年生和多次开花多年生开花行为的互相转化-文献精读21

Reciprocal conversion between annual and polycarpic perennial flowering behavior in the Brassicaceae 在十字花科植物中年生和多次开花多年生开花行为的互相转化 亮点 喜马拉雅须弥芥 和 内华达糖芥 是两个多年生植物模型 MADS-box 基因的剂量效应决定了一年生、二年生…

[图解]企业应用架构模式2024新译本讲解11-领域模型4

1 00:00:00,160 --> 00:00:01,870 好&#xff0c;到这里的话 2 00:00:02,620 --> 00:00:05,060 文字处理器的产品对象就生成了 3 00:00:06,880 --> 00:00:09,180 同样下面就是电子表格 4 00:00:10,490 --> 00:00:11,480 电子表格也同样的 5 00:00:11,490 -->…

用python编撰一个电脑清理程序

自制一个电脑清理程序&#xff0c;有啥用呢&#xff1f;在电脑不装有清理软件的时候&#xff0c;可以解决自己电脑内存不足的情况。 1、设想需要删除指定文件夹中的临时文件和缓存文件。以下是代码。 import os import shutil def clean_folder(folder_path): for root,…

11 IP协议 - IP协议头部

什么是 IP 协议 IP&#xff08;Internet Protocol&#xff09;是一种网络通信协议&#xff0c;它是互联网的核心协议之一&#xff0c;负责在计算机网络中路由数据包&#xff0c;使数据能够在不同设备之间进行有效的传输。IP协议的主要作用包括寻址、分组、路由和转发数据包&am…

计算机网络 期末复习(谢希仁版本)第4章

路由器&#xff1a;查找转发表&#xff0c;转发分组。 IP网的意义&#xff1a;当互联网上的主机进行通信时&#xff0c;就好像在一个网络上通信一样&#xff0c;看不见互连的各具体的网络异构细节。如果在这种覆盖全球的 IP 网的上层使用 TCP 协议&#xff0c;那么就…

2024 vite 静态 scp2 自动化部署

1、导入库 npm install scp2 // 自动化部署 npm install chalk // 控制台输出的语句 npm install ora2、核心代码 创建文件夹放在主目录下的 deploy/index.js 复制粘贴以下代码&#xff1a; import client from scp2; import chalk from chalk; import ora from ora;const s…

K8s速览

k8s的核心能力 ● 服务发现与负载均衡 ● 服务恢复 ● 服务伸缩 ● 自动发布与回滚 ● 批量执行 架构 server-client两层架构&#xff0c;Master作为中央管控节点&#xff0c;会和每一个Node进行一个连接&#xff1b; 所有UI层&#xff0c;client的操作&#xff0c;只会和Mat…

详解linux设备下的/dev/null

/dev/zero是一个特殊的设备文件&#xff0c;它在Linux系统中通常被用来生成无限数量的零数据流。 这个设备文件位于/dev目录下&#xff0c;它不代表任何实际的硬件设备&#xff0c;而是一个虚拟设备。 当从/dev/zero设备中读取数据时&#xff0c;会得到无限数量的零字节&…

【机器学习】因TensorFlow所适配的numpy版本不适配,用anaconda降低numpy的版本

目录 0 TensorFlow最高支持的numpy版本 1 激活你的环境&#xff08;如果你正在使用特定的环境&#xff09; 2 查找可用的NumPy版本 3 安装特定版本的NumPy 4. 验证安装 5.&#xff08;可选&#xff09;如果你更改了base环境 0 TensorFlow最高支持的numpy版本 要使用 …

Python | Leetcode Python题解之第132题分割回文串II

题目&#xff1a; 题解&#xff1a; class Solution:def minCut(self, s: str) -> int:n len(s)g [[True] * n for _ in range(n)]for i in range(n - 1, -1, -1):for j in range(i 1, n):g[i][j] (s[i] s[j]) and g[i 1][j - 1]f [float("inf")] * nfor …

k8s学习--kubernetes服务自动伸缩之水平收缩(pod副本收缩)HPA详细解释与案例应用

文章目录 前言HPA简介简单理解详细解释HPA 的工作原理监控系统负载模式HPA 的优势使用 HPA 的注意事项应用类型 应用环境1.metircs-server部署2.HPA演示示例&#xff08;1&#xff09;部署一个服务&#xff08;2&#xff09;创建HPA对象&#xff08;3&#xff09;执行压测 前言…

安装node

下载地址 Node.js — Run JavaScript Everywhere 按照下面的图操作即可 然后就下载完了。

【Vue】声明式导航-导航链接

文章目录 一、引入二、解决方案三、代码示例四、声明式导航-两个类名1&#xff09;router-link-active2&#xff09;router-link-exact-active 一、引入 但凡说到声明式导航&#xff0c;都需要想到router-link 需求 实现导航高亮效果 如果使用a标签进行跳转的话&#xff0c;需要…