news 2026/4/17 17:34:56

力扣-链表最大孪生和

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
力扣-链表最大孪生和

思路分析

  1. 找链表中点:用快慢指针(慢指针走 1 步,快指针走 2 步)找到链表的中间节点;
  2. 反转后半段链表:将中点后的后半段链表反转;
  3. 计算孪生和:用两个指针分别从链表头部和反转后的后半段头部出发,依次计算每对孪生节点的和,记录最大值。

代码实现

/** * 方法一:快慢指针找到中间节点,反转后半部分链表,遍历两部分节点计算最大和 * @param head * @return */publicintpairSum(ListNodehead){// 快慢指针找到中间节点ListNodeslow=head;ListNodefast=head;while(fast!=null&&fast.next!=null){slow=slow.next;fast=fast.next.next;}// 反转后半部分链表ListNodereverseHead=reverseListNode(slow);// 遍历两部分节点计算最大和intmaxSum=0;while(reverseHead!=null){intfirstNum=head.val;intsecondNum=reverseHead.val;maxSum=Math.max(maxSum,firstNum+secondNum);head=head.next;reverseHead=reverseHead.next;}returnmaxSum;}/** * @Author Feng * @Description * @Date 2026/1/14 * @Param [slow] * @return main.leetcode75.arr_str.entity.ListNode **/privateListNodereverseListNode(ListNodehead){// 定义前一个节点为null,当前节点为头节点ListNodeprev=null;ListNodecurr=head;while(curr!=null){ListNodetemp=curr.next;curr.next=prev;prev=curr;curr=temp;}returnprev;}

复杂度分析

  • 空间复杂度 O (1):无需额外存储所有节点值,仅用指针操作;
  • 时间复杂度 O (n):找中点 O (n/2) + 反转后半段 O (n/2) + 计算和 O (n/2),总复杂度 O (n)。

思路分析二

  1. 使用快慢指针找中点:

    • 使用快慢指针技术找到链表的中间节点
    • 慢指针每次移动一步,快指针每次移动两步
    • 当快指针到达末尾时,慢指针正好在链表的中点位置
  2. 利用栈存储前半部分节点值:

    • 创建一个双端队列(用作栈)
    • 从头节点开始遍历到中点之前的所有节点
    • 将这些节点的值依次压入栈中
    • 由于栈是后进先出的数据结构,这样栈顶元素对应的是链表后半部分对称位置的节点
  3. 配对求最大和:

    • 从中点开始遍历后半部分链表
    • 每次从栈中弹出一个值(这对应前半部分对称位置的节点值)
    • 将栈中弹出的值与当前后半部分节点的值相加
    • 更新最大和

代码实现二

publicintpairSum2(ListNodehead){// 快慢指针找到中间节点ListNodeslow=head;ListNodefast=head;while(fast!=null&&fast.next!=null){slow=slow.next;fast=fast.next.next;}// 遍历前半部分节点,将节点值加入栈中Deque<Integer>stack=newArrayDeque<>();while(head!=slow){stack.push(head.val);head=head.next;}// 遍历后半部分节点,弹出栈顶元素与当前节点值计算最大和intmaxSum=0;while(slow!=null){intfirstNum=stack.pop();intsecondNum=slow.val;maxSum=Math.max(maxSum,firstNum+secondNum);slow=slow.next;}returnmaxSum;}

复杂度分析

  • 时间复杂度:O(n),只需要遍历链表两次
  • 空间复杂度:O(n/2),只需要额外的空间存储前半部分节点的值
    优势:不需要修改原链表结构
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/8 22:41:30

GB28181视频监控平台构建:架构解析与部署实践

GB28181视频监控平台构建&#xff1a;架构解析与部署实践 【免费下载链接】wvp-GB28181-pro 项目地址: https://gitcode.com/GitHub_Trending/wv/wvp-GB28181-pro 平台架构设计原理 GB28181视频监控平台基于SIP协议栈构建&#xff0c;采用分布式架构设计&#xff0c;实…

作者头像 李华
网站建设 2026/4/18 8:08:52

效果惊艳!OpenDataLab MinerU打造的学术论文解析案例展示

效果惊艳&#xff01;OpenDataLab MinerU打造的学术论文解析案例展示 1. 引言&#xff1a;轻量级模型如何实现高精度文档理解 在当前大模型动辄数十亿甚至上百亿参数的背景下&#xff0c;如何在资源受限环境下实现高效、精准的文档理解成为工程落地的关键挑战。OpenDataLab/M…

作者头像 李华
网站建设 2026/4/18 8:19:50

Qwen-Image版本控制:随时回滚到稳定镜像版本

Qwen-Image版本控制&#xff1a;随时回滚到稳定镜像版本 你有没有遇到过这样的情况&#xff1a;公司刚上线的AI图像生成服务&#xff0c;突然因为一次镜像更新导致接口报错、用户无法出图&#xff1f;更糟的是&#xff0c;客户等着交稿&#xff0c;运维在查日志&#xff0c;开…

作者头像 李华
网站建设 2026/4/18 8:33:35

解锁网页视频下载神器:一键保存在线视频的终极方案

解锁网页视频下载神器&#xff1a;一键保存在线视频的终极方案 【免费下载链接】m3u8-downloader m3u8 视频在线提取工具 流媒体下载 m3u8下载 桌面客户端 windows mac 项目地址: https://gitcode.com/gh_mirrors/m3u8/m3u8-downloader 还在为无法下载网页视频而困扰吗&…

作者头像 李华
网站建设 2026/4/18 8:36:27

IndexTTS-2-LLM部署报错?kantts依赖问题解决实战教程

IndexTTS-2-LLM部署报错&#xff1f;kantts依赖问题解决实战教程 1. 引言 1.1 场景背景 在构建智能语音合成系统时&#xff0c;IndexTTS-2-LLM 因其融合大语言模型&#xff08;LLM&#xff09;与声学建模的能力&#xff0c;成为高质量文本转语音&#xff08;TTS&#xff09;…

作者头像 李华
网站建设 2026/4/18 5:42:05

RexUniNLU医疗文本处理:命名实体识别案例

RexUniNLU医疗文本处理&#xff1a;命名实体识别案例 1. 引言 随着自然语言处理技术在垂直领域的深入应用&#xff0c;医疗文本的结构化信息抽取成为智能医疗系统的核心能力之一。传统方法依赖大量标注数据&#xff0c;在实际场景中面临成本高、泛化差的问题。RexUniNLU 是一…

作者头像 李华