力扣刷题TOP101:14.BM16 删除有序链表中重复的元素-II
目录:
目的
思路
复杂度
记忆秘诀
python代码
目的
1→1→2→3→3 删除重复后变成2。
思路
这个任务是删除链表里重复的节点包含本身。可以看成是一个抽奖活动的系统升级。某人通过多种方式报名(节点不同),后台数据检测到这些人其实是同一个人(节点值相同)。为了公平抽奖并且惩罚该人,系统删除该用户的所有报名记录(所有重复节点),只保留那些唯一的报名用户。
准备检查:
- 创建了一个临时记录
dummy:
设置一个临时记录,方便从头开始管理,避免对第一个报名者的特殊处理。dummy.next = head表示临时记录指向实际第一个用户节点。 - 系统管理员
prev:
负责指引哪些记录有效,哪些需要删除。在开始时,prev指向临时记录dummy,准备去处理实际用户。 - 正在被检查的用户
current:
系统正在检查的报名信息,逐一遍历,确保没有重复的报名。
开始检查:
- 系统检查当前记录点和下一个记录是否重复:
如果发现当前记录和下一个记录重复( if current.next and current.val == current.next.val:),系统就开始一个内循环(while current.next and current.val == current.next.val:),继续跳过所有重复的报名记录(current = current.next),直到所有相同的记录都被跳过。比如,某个用户通过不同方式多次报名,系统会一直跳过他们,直到没有更多重复记录为止。- 管理员操作:
- 有重复的情况:
当我们跳过了所有重复的记录后,系统管理员会删除当前重复的所有记录(prev.next = current.next)。具体操作是让prev(即最后一个不重复的报名记录)指向current后面唯一的一个不重复的记录,也就是跳过所有重复的报名记录。- 没有重复的情况:
管理员会把继续准备检查下一条记录prev = prev.next。- 系统继续检查下一个用户:
无论当前记录是否重复,系统都会继续检查下一个记录current = current.next。
检查结束:
从第一个报名记录开始检查,一直检查到所有记录都处理完为止。最后,系统返回去掉所有重复报名记录后的链表,dummy.next 就是去除重复节点后的实际链表头。
复杂度
-
时间复杂度:O(n)
- 只检查了一次报名表,链表被遍历一次,
n是链表中节点的数量。
- 只检查了一次报名表,链表被遍历一次,
-
空间复杂度:O(1)
- 只使用了常数级别的额外空间。
记忆秘诀
- 虚拟头节点:避免处理链表头部的特殊情况。
- 内外循环配合:内循环跳过重复节点,外循环更新链表。
- 返回结果:返回去重后的实际链表dummy.next。
python代码
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param head ListNode类
# @return ListNode类
#
class Solution:def deleteDuplicates(self, head: ListNode) -> ListNode:# 创建一个虚拟头节点,方便处理边界情况dummy = ListNode(0)dummy.next = headprev = dummy # prev指向当前不重复元素的前一个节点current = head # current指向当前节点while current:# 检查当前节点是否有重复if current.next and current.val == current.next.val:# 找到所有重复的节点while current.next and current.val == current.next.val:current = current.next # 跳过重复节点# 将prev的下一个指向当前节点的下一个,即删除重复节点prev.next = current.nextelse:# 如果没有重复,prev指向当前节点prev = prev.next# 移动到下一个节点current = current.nextreturn dummy.next # 返回去掉重复元素后的链表头节点
* 欢迎大家探讨新思路,能够更好的理解和记忆
相关文章:
力扣刷题TOP101:14.BM16 删除有序链表中重复的元素-II
目录: 目的 思路 复杂度 记忆秘诀 python代码 目的 1→1→2→3→3 删除重复后变成2。 思路 这个任务是删除链表里重复的节点包含本身。可以看成是一个抽奖活动的系统升级。某人通过多种方式报名(节点不同),后台数据检测到这些…...
解决github网络慢的问题
前言 本文采用替换host的方式来加速github的git请求,主要我自己用来备份的懒人方式,不然每次都要手动修改hosts文件,skrskrskr… 一、获取到可用的ip 先到这个网站查询到低延迟的ip 站长工具:https://ping.chinaz.com/ 第2步&…...
docker及docker exec命令学习笔记
docker exec 是一个常用的 Docker 命令,允许你在已经运行的容器中执行命令或启动新的进程。以下是详细介绍和常见用法: 基本语法 docker exec [OPTIONS] CONTAINER COMMAND [ARG...]参数详解 1. CONTAINER指定目标容器的名字或容器 ID。可以通过以下命…...
linux环境宝塔服务部署安装及介绍
一、简介 宝塔面板是一款服务器管理软件,支持windows和linux系统,可以通过Web端轻松管理服务器,提升运维效率。例如:创建管理网站、FTP、数据库,拥有可视化文件管理器,可视化软件管理器,可视化C…...
充分统计量(Sufficient Statistic)概念与应用: 中英双语
充分统计量:概念与应用 在统计学中,充分统计量(Sufficient Statistic) 是一个核心概念。它是从样本中计算得出的函数,能够完整且无损地表征样本中与分布参数相关的信息。在参数估计中,充分统计量能够帮助我…...
基于Matlab计算机视觉的车道线识别与前车检测系统研究
随着自动驾驶技术的发展,车道线识别和前车检测成为智能驾驶系统中的核心技术之一。本实训报告围绕基于计算机视觉的车道线识别与前车检测系统展开,旨在通过处理交通视频数据,实时检测车辆所在车道及其与前车的相对位置,从而为车道…...
模糊测试中常见的10种变异mutation策略
1. 引入 基于变异策略的模糊测试,有两个重点: (1)seed:种子,初始的合法输入序列。 (2)mutation:对已经存在的输入序列,进行微调。 所以,mutatio…...
opencv-android编译遇到的相关问题处理
1、opencv-android sdk下载 下载地址:https://opencv.org/releases/ 下载安卓SDK即可 2、解压下载好的SDK 3、导入opencv的SDK到安卓项目中 导入步骤在/OpenCV-android-sdk/sdk/build.gradle文件的注释中写的非常详细,大家可安装官方给出的步骤导入。…...
把 py脚本生成windows 可执行的文件
1 确保生成的exe文件,不会立即退出 input("Please input any key to exit!")2 安装 PyInstaller 确保已经安装了 PyInstaller。可以使用 pip 来安装它: pip install pyinstaller3 执行命令 这里的 --onefile 选项表示将所有依赖项打包到一…...
云计算的发展历史与未来展望
云计算的起源与发展 云计算的概念最早可以追溯到20世纪60年代,当时的计算机科学家约翰麦卡锡(John McCarthy)提出了“按需提供计算能力”的构想。尽管这一理念在当时的技术条件下无法实现,但为云计算的未来发展奠定了理论基础。 …...
基于飞腾S2500处理器的全国产加固服务器
近日,西安康德航测电子科技有限公司凭借其深厚的行业底蕴和创新精神,正式推出了基于飞腾S2500处理器的全国产加固服务器。这一产品的问世,不仅标志着我国在信息技术领域的自立自强迈出了坚实的一步,更以其卓越的性能、坚固的设计和…...
gitlab-cicd部署安装与具体操作
一、安装 本例中是用安装包直接在ubuntu下安装的,也可以用docker镜像。 curl -LJO https://gitlab-runner-downloads.s3.amazonaws.com/latest/rpm/gitlab-runner_amd64.rpmrpm -i gitlab-runner_amd64.rpm 安装runner后,需要跟在runner所在服务器安装…...
2022高等代数上【南昌大学】
2022 高等代数 证明: p ( x ) p(x) p(x) 是不可约多项式的充要条件是对任意的多项式 f ( x ) , g ( x ) f(x), g(x) f(x),g(x),若 p ( x ) ∣ f ( x ) g ( x ) p(x) \mid f(x)g(x) p(x)∣f(x)g(x),则有 p ( x ) ∣ f ( x ) p(x) \mid f(x) p(x)∣f(x) 或 p ( x ) ∣ g (…...
文本生成类(机器翻译)系统评估
在机器翻译任务中常用评价指标:BLEU、ROGUE、METEOR、PPL。 这些指标的缺点:只能反应模型输出是否类似于测试文本。 BLUE(Bilingual Evaluation Understudy):是用于评估模型生成的句子(candidate)和实际句子(referen…...
11.7【miniob】【debug】
这里的vector是实际值,而relation是指针,所以要解引用,*$1,并在最后调用其析构函数 emplace_back 和 push_back 都是用于在容器(如 std::vector)的末尾添加元素的方法,但它们的工作方式有所不同…...
OSHI 介绍与使用
OSHI 介绍 OSHI(Operating System and Hardware Information)是一个开源的Java库,用于从操作系统和硬件层面获取系统资源的详细信息。它提供了对操作系统、硬件、CPU、内存、磁盘、网络接口等多种信息的访问,且不依赖于平台特定的…...
Hadoop生态圈框架部署(八)- Hadoop高可用(HA)集群部署
文章目录 前言一、部署规划二、Hadoop HA集群部署(手动部署)1. 下载hadoop2. 上传安装包2. 解压hadoop安装包3. 配置hadoop配置文件3.1 虚拟机hadoop1修改hadoop配置文件3.1.1 修改 hadoop-env.sh 配置文件3.3.2 修改 core-site.xml 配置文件3.3.3 修改 …...
【RocketMQ】Name Server 无状态特点及如何让 Broker Consumer Producer 感知新节点
文章目录 前言1. Name Server 无状态特点2. Name Server 地址服务3. Name Server 手动配置后记 前言 看了 《RocketMQ 消息中间件实战派(上册)》前面一点,书中代码太多容易陷入细节。 这里简单描述下 RocketMQ Name Server 无状态表现在什么…...
蓝牙定位的MATLAB程序,四个锚点、三维空间
这段代码通过RSSI信号强度实现了在三维空间中的蓝牙定位,展示了如何使用锚点位置和测量的信号强度来估计未知点的位置。代码涉及信号衰减模型、距离计算和最小二乘法估计等基本概念,并通过三维可视化展示了真实位置与估计位置的关系。 目录 程序描述 运…...
机器学习--绪论
开启这一系列文章的初衷,是希望搭建一座通向机器学习世界的桥梁,为有志于探索这一领域的读者提供系统性指引和实践经验分享。随着人工智能和大数据技术的迅猛发展,机器学习已成为推动技术创新和社会变革的重要驱动力。从智能推荐系统到自然语…...
十分钟微调Qwen2.5-7B实战:效果立现,适合新手的完整教程
十分钟微调Qwen2.5-7B实战:效果立现,适合新手的完整教程 1. 准备工作与环境介绍 1.1 为什么选择Qwen2.5-7B进行微调 Qwen2.5-7B是阿里云推出的开源大语言模型,7B参数规模在单卡上就能流畅运行。相比全量微调,使用LoRA技术可以在…...
OpenClaw硬件监控:Gemma-3-12b-it分析传感器数据并预警
OpenClaw硬件监控:Gemma-3-12b-it分析传感器数据并预警 1. 为什么需要AI驱动的硬件监控? 去年夏天,我的家用服务器因为CPU散热器故障导致过热关机,丢失了正在处理的科研数据。这件事让我开始思考:传统的阈值告警太被…...
解析器开发的终极革命:为什么Ohm比传统解析器更强大?
解析器开发的终极革命:为什么Ohm比传统解析器更强大? 【免费下载链接】ohm A library and language for building parsers, interpreters, compilers, etc. 项目地址: https://gitcode.com/gh_mirrors/oh/ohm Ohm是一个用于构建解析器、解释器和编…...
Phi-3-mini-4k-instruct-gguf惊艳效果:中文长难句拆解+逻辑关系标注+通俗转述三重能力展示
Phi-3-mini-4k-instruct-gguf惊艳效果:中文长难句拆解逻辑关系标注通俗转述三重能力展示 1. 模型能力概览 Phi-3-mini-4k-instruct-gguf作为微软Phi-3系列的轻量级文本生成模型,在中文处理方面展现出令人惊喜的能力。这个开箱即用的模型特别擅长处理三…...
【金蝶云星空】无发票模块非暂估模式下,期初应付录入
学习目标 学习本内容后,您将掌握如何录入在没发票模块,不启用暂估应付模式下的应付初始化数据 业务背景 本篇我们则进行讲解没发票模块,不启用暂估应付模式下如何录入期初数据。 业务场景有“先开票后入库、已入库未开票、已入库已开票未付…...
OpenClaw自动化测试:千问3.5-27B驱动UI全流程验证
OpenClaw自动化测试:千问3.5-27B驱动UI全流程验证 1. 为什么选择OpenClaw做自动化测试? 去年接手一个前端重构项目时,我遇到了一个典型困境:每次代码改动后,都需要手动执行47个关键页面的功能测试。这套测试流程完整…...
OpenClaw技能开发入门:为Phi-3-mini-128k-instruct定制自动化插件
OpenClaw技能开发入门:为Phi-3-mini-128k-instruct定制自动化插件 1. 为什么需要自定义OpenClaw技能 去年夏天,我发现自己每天要重复做三件事:查看天气、整理会议纪要、归档下载的文件。这些琐事看似简单,但累积起来每天要消耗我…...
UNIX设计哲学:一切皆文件的原理与应用
1. UNIX 设计哲学的核心:"一切皆文件"在计算机操作系统的演进历程中,UNIX系统以其简洁而强大的设计哲学独树一帜。作为一名长期与UNIX/Linux系统打交道的开发者,我深刻体会到"一切皆文件"这一理念对整个计算机领域产生的…...
告别手动转换!用Python自动化处理CSV到Little_R的完整指南
告别手动转换!用Python自动化处理CSV到Little_R的完整指南 在数据科学和机器学习领域,数据格式转换是一项频繁且耗时的任务。特别是当我们需要将常见的CSV格式转换为特定领域专用的Little_R格式时,手动操作不仅效率低下,还容易出错…...
2024年实测:火狐浏览器上这3款广告过滤插件,谁才是真正的网页加速器?
2024年火狐浏览器广告过滤插件终极对决:谁才是网页加速王者? 在数字时代,网页浏览速度直接影响着我们的工作效率和上网体验。对于火狐浏览器用户来说,选择一款高效的广告过滤插件不仅能屏蔽恼人的广告,更能显著提升页面…...
