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

【算法】Remove Zero Sum Consecutive Nodes from Linked List 从链表中删去总和值为零的连续节点

文章目录

  • Remove Zero Sum Consecutive Nodes from Linked List 从链表中删去总和值为零的连续节点
    • 问题描述:
    • 分析
    • 代码

Remove Zero Sum Consecutive Nodes from Linked List 从链表中删去总和值为零的连续节点

问题描述:

给你一个链表的头节点 head,请你编写代码,反复删去链表中由 总和 值为 0 的连续节点组成的序列,直到不存在这样的序列为止。

删除完毕后,请你返回最终结果链表的头节点。

节点数量 范围[1,1000],节点值范围[-1000,1000]

分析

这个问题要求把链表中和为0的连续节点删除,很明显是一个前缀和处理,而且数据规模不大,暴力处理也可以。
首先使用一个dummy,方便处理,使用map记录每个节点的前缀和,map[前缀和,节点].
在遍历链表的过程中,首先计算该节点的前缀和sum,如果sum之前出现过,说明遇到了一段需要删除的区间,删除处理。此时map需要清空,然后从头,再进行遍历循环,直到遍历到结尾。
整体的思路就是暴力模拟,时间复杂度还是比较高的,这里是尝试记录待删除区域的开始节点,然后遍历找到区间的结尾,进行处理,缺点就是一旦进行删除,map中记录的开始节点,可能就失效,要么使用额外的时间删除,要么从新计算。

另一种思路也是记录,但是这里是记录前缀和最后出现的节点。这样第一次遍历时完成map记录。
第二次遍历,一旦发现出现了前缀和,就可以找到这个区域,进行删除。因为删除的区间和是0,所以不影响前缀和记录,同样也不会影响map中记录的前缀和节点。

代码

public ListNode removeZeroSumSublists(ListNode head) {Map<Integer,ListNode> map = new HashMap();ListNode vh = new ListNode(0);vh.next = head;ListNode p = vh,pre =null;int sum = 0; while(p!=null){sum += p.val;if(map.containsKey(sum)){pre = map.get(sum);pre.next = p.next;map.clear();p = vh;sum =0;}else{map.put(sum,p);p = p.next;}}return vh.next; }

时间复杂度 O(N?)

空间复杂度: O(N)

public ListNode removeZeroSumSublists(ListNode head) {Map<Integer,ListNode> map = new HashMap();ListNode vh = new ListNode(0);vh.next = head;ListNode p = head;int sum = 0;while(p!=null){sum += p.val;map.put(sum,p);p=p.next;}p = vh;sum = 0;while(p!=null){sum += p.val;if(map.containsKey(sum)){ListNode q = map.get(sum);p.next = q.next; }p = p.next;} return vh.next; }

时间复杂度 O(N)

空间复杂度: O(N)

Tag

Hash linkedlist

相关文章:

【算法】Remove Zero Sum Consecutive Nodes from Linked List 从链表中删去总和值为零的连续节点

文章目录 Remove Zero Sum Consecutive Nodes from Linked List 从链表中删去总和值为零的连续节点问题描述&#xff1a;分析代码 Remove Zero Sum Consecutive Nodes from Linked List 从链表中删去总和值为零的连续节点 问题描述&#xff1a; 给你一个链表的头节点 head&am…...

音悦台项目测试报告

文章目录 项目背景项目功能测试计划与设计功能测试自动化测试 测试结果功能测试结果UI自动化测试结果 项目背景 现如今人们的生活压力大&#xff0c;容易使人疲惫&#xff0c;为了使得人们在闲暇之余可以听音乐放松&#xff0c;为此设计出一款轻量的听音乐网站&#xff0c;快速…...

数据库存储过程和函数

MySQL存储过程和存储函数 MySQL中提供存储过程&#xff08;procedure&#xff09;与存储函数&#xff08;function&#xff09;机制&#xff0c;我们先将其统称为存储程序&#xff0c;一般的SQL语句需要先编译然后执行&#xff0c;存储程序是一组为了完成特定功能的SQL语句集&…...

Spring依赖注入有哪些?各有什么优缺点?

文章目录 前言概述一、属性注入1.1 实例1.2 优点1.3 缺点 二、Setter注入2.1 实例2.2 优点2.3 缺点 三、 构造方法注入3.1 实例3.2 优点3.3 缺点 四、扩展 前言 IoC和DI是Spring中重要的两个概念&#xff0c;其中IoC指的是控制反转&#xff0c;DI(依赖注入)指的是IoC的具体实现…...

java八股文-并发篇

并发篇 1. 线程状态 要求 掌握 Java 线程六种状态掌握 Java 线程状态转换能理解五种状态与六种状态两种说法的区别 六种状态及转换 分别是 新建 当一个线程对象被创建&#xff0c;但还未调用 start 方法时处于新建状态此时未与操作系统底层线程关联 可运行 调用了 start …...

Elasticsearch8.6.0安装

Elasticsearch 8.5.0 安装 Elasticsearch 简介Elasticsearch 8.6.0 安装创建网络拉取镜像运行镜像设置密码修改kibana配置绑定ES代码绑定&#xff1a;手动绑定&#xff1a; 配置ik分词器扩展词词典停用词词典 Elasticsearch 简介 Elasticsearch&#xff08;ES&#xff09; 是一…...

Vue - 第五天 动态组件 插槽 自定义指令

动态组件& 插槽& 自定义指令 一、动态组件1.什么是动态组件2.如何实现动态组件渲染3.使用 keep-alive 保持状态4. keep-alive 对应的生命周期函数5. keep-alive 的 include 属性6.动态展示左右组件7.例子 二、插槽1.什么是插槽2.体验插槽的基础用法2.1 没有预留插槽的内…...

如何开展web自动化测试

Web 自动化是指使用测试脚本在 Web 上自动执行任务。它包括填写表单、导航网页、单击链接或按钮以及从网站中提取数据等任务。 它可用于各种目的&#xff0c;例如自动输入数据或测试网站的功能。有几种工具和编程语言可用于自动化网络上的任务&#xff0c;包括Selenium&#x…...

【博学谷学习记录】超强总结,用心分享 | 架构师 Maven学习总结

文章目录 Maven基本1.什么是Maven2.为什么用Maven?&#xff08;1&#xff09;jar 包的规模&#xff08;2&#xff09; jar 包的来源&#xff08;3&#xff09;jar 包之间的依赖关系 3.Maven目录结构4.maven仓库配置 Pom层次Pom文件简介Super POM 依赖管理1 依赖传递2 传递性依…...

PPT里文字太多如何排版-一口气教你7种布局瞬间让PPT高大上起来

简介 这是我们学PPT处于初级到中级进化阶段常做的一件事,就是拿了这种纯文字类版面来做布局。而且这种文字都是政企类的、相当苦涩难懂、无法创意。 因此我们会要求使用7种排版来优化这个版面。这和达芳奇画鸡蛋很像,这样的练习需要坚持一段时间,就是拿了纯文字来beautifu…...

Whistle(基于 Node 实现的跨平台抓包调试工具)的使用

Whistle(基于 Node 实现的跨平台抓包调试工具)的使用 基于Node实现的跨平台抓包调试工具 可以劫持网络请求&#xff0c;并进行请求和响应的修改&#xff0c;来提高我们的开发调试效率 1.一键安装(装包/证书) npm i -g whistle && w2 start --init 证书的问题 安装…...

数学模型:Python实现非线性规划

上篇文章&#xff1a;整数规划 文章摘要&#xff1a;非线性规划的Python实现。 参考书籍&#xff1a;数学建模算法与应用(第3版)司守奎 孙玺菁。 PS&#xff1a;只涉及了具体实现并不涉及底层理论。学习底层理论以及底层理论实现&#xff1a;可以参考1.最优化模型与算法——基于…...

Docker网路模型(四)使用 bridge 网络

使用 bridge 网络 在计算机网络中&#xff0c;一个 bridge&#xff08;网桥&#xff09;是一个链路层设备&#xff0c;负责在不同的网段之间转发信息。 bridge 可以是真实的硬件设备也可以是由宿主机底层提供的软件模拟设备。 在 Docker 中&#xff0c;bridge 网络使用了软件…...

数据结构与算法之美 | 排序(2)

归并排序&#xff08;Merge Sort&#xff09; 基本思想&#xff1a; 如果要排序一个数组&#xff0c;我们先把数组从中间分成前后两部分&#xff0c;然后对前后两部分分别排序&#xff0c;再将排好序的两部分合并在一起&#xff0c;这样整个数组就都有序了。 def merge_sort…...

【外企面试系列】必备口语短语与例句 - A系列

a big headache令人头痛的事情 I have a big headache from all the noise. (我因为噪音而头痛。)The paperwork is a big headache for me. (对我来说&#xff0c;文书工作是件头痛的事情。) a fraction of 一部分 She ate only a fraction of her meal. (她只吃了一部分饭…...

Java使用Opencv进行大图找小图并使用其找图功能进行bilibili视频下载案例

Java使用Opencv进行大图找小图并使用其找图功能进行bilibili视频下载案例 一、Opencv大图找小图说明二、Opencv的window安装1.下载windows下的安装包2.安装3.Java中Opencv加载测试 三、Java中通过Opencv进行模板匹配大图找小图四、进行多图查找五&#xff1a;案例下载bilibili视…...

肠道健康从核心菌属开始:肠道菌群的关键

谷禾健康 5月29日&#xff0c;是世界肠道健康日。肠道是人体最重要的消化系统之一&#xff0c;与人体健康紧密相关。而肠道菌群作为肠道重要组成部分&#xff0c;在肠道健康中发挥着重要的作用。 编辑​ 由于基因、环境、饮食、药物等因素的影响&#xff0c;每个人的肠道菌群都…...

深度学习实战37-NASNet(具有自动搜索能力的神经网络模型)的搭建与实战应用

大家好,我是微学AI,今天给大家介绍一下深度学习实战37-NASNet(具有自动搜索能力的神经网络模型)的搭建与实战应用,NASNet是由Google Brain团队开发的一种具有自动搜索能力的神经网络模型,利用强化学习和进化算法等技术来自动地搜索最优的神经网络架构。NASNet模型的设计灵感…...

碳排放预测模型 | Python实现基于机器学习回归分析的碳排放预测模型——随机森林、决策树、KNN 和多层感知器 (MLP) 预测分析

文章目录 效果一览文章概述研究内容环境准备源码设计KNNRandom ForestDecision TreeMLPModel Evaluation学习总结参考资料效果一览...

人体检测技术之毫米波雷达

人体检测技术之毫米波雷达 1.概述 智能人脸/视频锁领域的人体检测需求是要求远距离达到1m左右即可,一旦在此距离内检测人,则锁唤醒进行人脸识别,视频录制等操作。所以,人体检测技术非常关键。 选型主要是几个维度: 1.支持检测的距离范围,能否准确输出距离信息 2.支持…...

MAX-M8C-0,支持辅助定位的超紧凑GNSS模块

简介今天我要向大家介绍的是 u-blox 的并发GNSS模块——MAX-M8C-0。这是一款专为成本敏感型应用设计、具有超低功耗的超紧凑高性能模块。该模块基于高性能 u-blox M8 GNSS引擎&#xff0c;支持并发接收多达3个GNSS系统&#xff08;GPS/Galileo GLONASS或BeiDou&#xff09;&am…...

【VLM】Gated Attention, Gated DeltaNet

Gated Attention 和 Gated DeltaNet 是近期在长文本大模型&#xff08;特别是探索 O(N)O(N)O(N) 线性复杂度的高效序列模型&#xff09;中非常核心的架构创新。它们分别解决了传统 Transformer 在扩展上下文时面临的注意力坍缩&#xff08;Attention Sinks&#xff09;和线性注…...

memtest_vulkan:专业级Vulkan GPU显存稳定性测试工具全解析

memtest_vulkan&#xff1a;专业级Vulkan GPU显存稳定性测试工具全解析 【免费下载链接】memtest_vulkan Vulkan compute tool for testing video memory stability 项目地址: https://gitcode.com/gh_mirrors/me/memtest_vulkan 在GPU计算和图形处理日益重要的今天&…...

AI驱动的计划驱动开发:Gemini Plan Commands深度解析与实践指南

1. 项目概述&#xff1a;当AI工程师遇上“计划指挥官” 如果你是一名开发者&#xff0c;尤其是经常和AI模型打交道的工程师&#xff0c;你肯定遇到过这样的场景&#xff1a;面对一个复杂的代码库&#xff0c;你想快速理解它的架构&#xff1b;或者接到一个新功能需求&#xff…...

你还在手动写Type Hints和Docstring?Gemini实时生成合规PEP 484/561注释(附GitHub Star超5k的私有化部署模板)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;你还在手动写Type Hints和Docstring&#xff1f;Gemini实时生成合规PEP 484/561注释&#xff08;附GitHub Star超5k的私有化部署模板&#xff09; 现代Python工程已将类型安全与可维护性提升至核心地位…...

【BMC】OpenBMC开发进阶:从零构建自定义Layer与集成应用

1. OpenBMC自定义Layer开发入门 第一次接触OpenBMC的开发者常会困惑&#xff1a;如何在现有框架下快速集成自己的硬件平台和应用&#xff1f;这就像装修房子&#xff0c;OpenBMC提供了毛坯房&#xff08;基础框架&#xff09;&#xff0c;我们需要根据户型&#xff08;硬件&…...

ArcGIS栅格计算器还能这么玩?一个‘土办法’搞定土壤侵蚀分级(附替代Con函数的数值映射技巧)

ArcGIS栅格计算器的数值映射技巧&#xff1a;突破Con函数限制的土壤侵蚀分级方案 引言&#xff1a;当标准工具遇到非标准问题 在GIS分析工作中&#xff0c;栅格计算器堪称瑞士军刀般的存在。但真正经历过复杂空间分析的人都知道&#xff0c;这把"军刀"有时会意外卡…...

Vivado仿真避坑指南:从Testbench编写到波形调试的完整实战(以流水灯为例)

Vivado仿真避坑指南&#xff1a;从Testbench编写到波形调试的完整实战&#xff08;以流水灯为例&#xff09; 在FPGA开发中&#xff0c;仿真环节往往是新手工程师最容易"踩坑"的重灾区。明明RTL代码逻辑清晰&#xff0c;下载到板卡却出现异常行为&#xff1b;仿真波…...

告别重装系统!在Ubuntu 22.04上从零到一搞定ROS2 Humble(附小乌龟测试)

告别重装系统&#xff01;在Ubuntu 22.04上从零到一搞定ROS2 Humble&#xff08;附小乌龟测试&#xff09; 每次看到论坛里"ROS2请用Ubuntu 20.04"的推荐&#xff0c;我都忍不住想&#xff1a;难道新系统就注定与机器人开发无缘&#xff1f;去年我将工作站升级到22.0…...

从安卓4到安卓12:手把手教你搞定XP、EdXposed、LSPosed三大框架(附版本选择指南)

安卓模块化框架演进史&#xff1a;从XP到LSPosed的技术迭代与实战指南 在安卓系统的开放生态中&#xff0c;模块化框架始终扮演着拓展系统能力的核心角色。十年前&#xff0c;当开发者首次通过Xposed框架在不修改APK的情况下实现功能增强时&#xff0c;这种"热插拔"式…...