当前位置: 首页 > news >正文

力扣刷题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信号强度实现了在三维空间中的蓝牙定位,展示了如何使用锚点位置和测量的信号强度来估计未知点的位置。代码涉及信号衰减模型、距离计算和最小二乘法估计等基本概念,并通过三维可视化展示了真实位置与估计位置的关系。 目录 程序描述 运…...

机器学习--绪论

开启这一系列文章的初衷,是希望搭建一座通向机器学习世界的桥梁,为有志于探索这一领域的读者提供系统性指引和实践经验分享。随着人工智能和大数据技术的迅猛发展,机器学习已成为推动技术创新和社会变革的重要驱动力。从智能推荐系统到自然语…...

7.4.分块查找

一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...

React Native 导航系统实战(React Navigation)

导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

AI,如何重构理解、匹配与决策?

AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...