代码随想录算法训练营Day04

news/2025/4/1 14:55:08/文章来源:https://www.cnblogs.com/Anson502/p/18800306

两两交换链表中的节点

注意循环控制条件以及cur的位置
交换的是cur后面的两个节点的位置

class Solution {public ListNode swapPairs(ListNode head) {ListNode dummyHeadNode = new ListNode(0);dummyHeadNode.next = head;ListNode current = dummyHeadNode;while(current.next!=null&&current.next.next!=null){ListNode temp = current.next;ListNode temp1 = temp.next.next;current.next = temp.next;temp.next.next = temp;temp.next = temp1;current = temp;}return dummyHeadNode.next;}
}

删除链表倒数第n个节点

双指针是最优解法,也可以用笨方法,倒数第n个是正数第size-n个,再用deleteAtIndex删除即可

class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {//用到了双指针的思想,一个快指针一个慢指针,快指针先往后移动,然后同时向后移动,当快指针移动到末尾时,慢指针移动到要删除元素的位置ListNode dummyHeadNode = new ListNode(0,head);ListNode slow = dummyHeadNode;ListNode fast = dummyHeadNode;for(int i = 0;i<n+1;i++){fast = fast.next;}while(fast!=null){slow = slow.next;fast = fast.next;}slow.next = slow.next.next;return dummyHeadNode.next;}
}

链表相交

双指针,保证链表的current指针齐头并进,直至遇到交点

public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {ListNode dummyHeadNodeA = new ListNode(0,headA);ListNode dummyHeadNodeB = new ListNode(0,headB);ListNode currentA = dummyHeadNodeA;ListNode currentB = dummyHeadNodeB;int sizeA = 0;int sizeB = 0;sizeA = getSize(currentA);sizeB = getSize(currentB);int dif = 0;if(sizeA>sizeB){dif = sizeA-sizeB;for(int i = 0;i<dif;i++){currentA = currentA.next;}}else{dif = sizeB-sizeA;for(int i = 0;i<dif;i++){currentB = currentB.next;}}while(currentA!=currentB){currentA = currentA.next;currentB = currentB.next;}return currentA;}public int getSize(ListNode current){int size = 0;while(current!=null){current = current.next;size++;}return size;}
}

环形链表

这里不用dummy Head Node了

成环的条件

  1. 定义两个指针

    • 慢指针(slow):每次移动一个节点。

    • 快指针(fast):每次移动两个节点。

  2. 操作步骤

    • 两个指针从链表头节点同时开始移动。

    • 如果链表中存在环,快指针和慢指针最终会在环内相遇。

    • 如果链表没有环,快指针会先到达链表末尾(即指向 null)。

  3. 原理

    • 在环内,快指针的速度比慢指针快,因此它会不断追赶慢指针并最终相遇。

    • 时间复杂度为𝑂(𝑛),空间复杂度为 𝑂(1)。

找到环的入口

  1. 当快慢指针在环内相遇后,将其中一个指针(如 slow)重新放回链表头。

  2. 两个指针以相同速度(每次移动一个节点)继续移动。

  3. 它们再次相遇时,相遇的节点即为环的入口。

public class Solution {public ListNode detectCycle(ListNode head) {if (head == null || head.next == null) {return null; // 链表为空或只有一个节点时,不可能有环}ListNode slow = head;ListNode fast = head;do {if (fast == null || fast.next == null) {return null; // 快指针先到末尾,这里考虑了奇偶数的问题,说明没有环}slow = slow.next; // 慢指针移动一步fast = fast.next.next; // 快指针移动两步} while (slow != fast);//为什么do-while?因为一开始将slow和fast都赋值为head,根本不进循环啊!!slow = head;while(slow!=fast){slow = slow.next;fast = fast.next;}return slow;}
}

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

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

相关文章

读DAMA数据管理知识体系指南35数据仓库和商务智能活动

读DAMA数据管理知识体系指南35数据仓库和商务智能活动1. 活动 1.1. 理解需求1.1.1. 构建一个数据仓库与开发一套业务系统不同1.1.2. 业务系统的开发取决于精确的、具体的业务需求1.1.3. 数据仓库建设则是把数据汇集在一起,再以各种不同的方式使用这些数据1.1.4. 要考虑业务目标…

『Plotly实战指南』--饼图绘制基础篇

在数据可视化的世界里,饼图是一种直观且广泛使用的图表类型。 它能够将数据各个部分占整体的比例关系清晰地展现出来,适用于诸如市场占有率分析、调查结果分布、预算分配等多个领域。 饼图以扇形面积比例直观展示数据分布,适合用于:分类数据的占比分析(如市场份额、用户画…

可视化图解算法: 二叉树的前序遍历

对于二叉树的相关算法,我们总结了一套【可视化+图解】方法,依据此方法来解决相关问题,算法变得易于理解,写出来的代码可读性高也不容易出错。1. 题目 描述 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 数据范围:二叉树的节点数量满足 0≤n≤100 ,二叉树节点的…

2025成都.NET开发者Connect圆满结束

2025年成都.NET开发者Connect线下聚会活动于3月29日圆满结束,本次活动吸引了约30位.NET开发者朋友参与,他们分别来自成都各家技术公司,相聚城南华府国际A座24楼会议区,共同探讨.NET+AIGC & Agile101相关话题。大家好,我是Edison。 2025年成都.NET开发者Connect线下聚会…

阿里云矢量图

阿里云矢量图 子比主题集成阿里云矢量图标库完整指南 最后更新:2025年03月29日 | 适用版本:子比主题7.3+一、阿里云项目配置 1.1 创建图标项目访问阿里云矢量图标库并登录搜索图标 → 加入购物车 → 创建新项目时设置: FontClass/Symbol前缀:zb- # 与主题CSS类名兼容 Font…

AMD GPU上对比语言图像预训练(CLIP)模型的交互(下)

3. 步骤3:检查图像和文本 将COCO数据集中的8幅样本图像及其文本描述输入模型,并比较相应特征之间的相似性。 import os import matplotlib.pyplot as plt from PIL import Image# 使用COCO数据集中的图像及其文本描述 image_urls = ["*/6/8378612_34ab6787ae_z.jpg&quo…

AMD GPU上对比语言图像预训练(CLIP)模型的交互(上)

AMD GPU上对比语言图像预训练(CLIP)模型的交互 3.1.1 介绍 对比语言图像预训练(CLIP)是一种连接视觉和自然语言的多模态深度学习模型。它是在OpenAI的论文从自然语言监督中学习可转移的视觉模型(2021)中介绍的,并在大量(4亿)图像字幕对的网络抓取数据上进行了对比训练…

推荐关注《AI芯片开发核心技术详解》(1)、《智能汽车传感器:原理设计应用》(2)、《TVM编译器原理与实践》(3)、《LLVM编译器原理与实践》(4),谢谢

4本书推荐《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》由清华大学出版社资深编辑赵佳霓老师策划编辑的新书《AI芯片开发核心技术详解》已经出版,京东、淘宝天猫、当当等网上,相应陆陆续续可以购买。该…

惊!Docker Desktop竟然不会自动释放磁盘空间,C盘告急!

Docker Desktop竟然不会自动释放磁盘占用 > > 操作系统:Windows 11 家庭中文版 (23H2,22631.4037)16GB > > Docker Desktop 版本:v4.34.3 > 1. 缘起 docker pull docker-0.unsee.tech/savatar101/omniparse:0.1 拉取镜像,某个片段卡住,我主动取消了改操…

深入掌握FastAPI与OpenAPI规范的高级适配技巧

title: 深入掌握FastAPI与OpenAPI规范的高级适配技巧 date: 2025/03/30 01:16:11 updated: 2025/03/30 01:16:11 author: cmdragon excerpt: OpenAPI规范是RESTful API的标准描述格式,FastAPI通过自动化Schema生成机制将Pydantic模型和路径操作转换为标准OpenAPI文档,实现实…

‌Docker Desktop启动后自动加载Ubuntu WSL,docker-desktop-data WSL消失问题解析

‌Docker Desktop启动后自动加载Ubuntu WSL,docker-desktop-data WSL消失问题解析操作系统:Windows 11 家庭中文版 (23H2,22631.4037)16GB Docker Desktop 版本:v4.34.3如果赶时间,可以直接看结论。 Docker Desktop用的频次不是很高,记得之前安装完,用wsl --list -v命…

Prometheus的标签管理

作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 目录一.标签概述1.什么是标签2.标签主要有两种表现形式3.Prometheus对数据处理的流程二.relabel_configs修改target标签案例1.为targets自定义打标签案例2.使用target_label新增标签2.relabel_configs替换标签…