2130、链表最大孪生和|2130、链表最大孪生和 | 算法(leetode,附思维导图 + 全部解法)300题

零 标题:算法(leetode,附思维导图 + 全部解法)300题之(2130)链表最大孪生和 一 题目描述 【2130、链表最大孪生和|2130、链表最大孪生和 | 算法(leetode,附思维导图 + 全部解法)300题】2130、链表最大孪生和|2130、链表最大孪生和 | 算法(leetode,附思维导图 + 全部解法)300题
文章图片

2130、链表最大孪生和|2130、链表最大孪生和 | 算法(leetode,附思维导图 + 全部解法)300题
文章图片

2130、链表最大孪生和|2130、链表最大孪生和 | 算法(leetode,附思维导图 + 全部解法)300题
文章图片

二 解法总览(思维导图) 2130、链表最大孪生和|2130、链表最大孪生和 | 算法(leetode,附思维导图 + 全部解法)300题
文章图片

三 全部解法 1 方案1
1)代码:

// 方案1 “化归法(即 把不熟悉的变成熟悉的、复杂的变成简单的,如 这里先将链表 转换成 数组)”。 // 技巧:原输入为链表可以考虑将其转换成数组,因为链表的增、删操作便捷,但按索引位置查询(数组便捷)操作不便捷!// 思路: // 1)状态初始化: resList = [], resMax = Number.NEGATIVE_INFINITY 。 // 2)核心1:遍历 链表 ,将每个节点值 依次 存入数组 resList 中。 // 3)核心2:遍历 resList 的前半部分,求得每个 孪生和(即 tempSum ) 。 // 3.1)更新 resMax ,resMax = Math.max(resMax, tempSum) 。 // 4)返回结果 resMax 。 var pairSum = function(head) { // 1)状态初始化: resList = [], resMax = Number.NEGATIVE_INFINITY 。 let resList = [], resMax = Number.NEGATIVE_INFINITY; // 2)核心1:遍历 链表 ,将每个节点值 依次 存入数组 resList 中。 while (head) { resList.push(head.val); head = head.next; }// 3)核心2:遍历 resList 的前半部分,求得每个 孪生和(即 tempSum ) 。 const l = resList.length; for (let i = 0; i < Math.floor(l / 2); i++) { const tempSum = resList[i] + resList[l - i - 1]; // 3.1)更新 resMax ,resMax = Math.max(resMax, tempSum) 。 resMax = Math.max(resMax, tempSum); }// 4)返回结果 resMax 。 return resMax; };

2 方案2
1)代码:
// 方案2 “快慢指针 + 双指针 法”。 // 参考: // 1)https://leetcode-cn.com/problems/maximum-twin-sum-of-a-linked-list/solution/shuang-zhou-sai-di-69chang-leetcode5961l-rals/// 思路: // 1)状态初始化:slow = head, fast = head, resSum = Number.NEGATIVE_INFINITY 。 // 2)核心1:通过 快慢指针,寻找链表中点。 // 3)核心2:反转后半部分的链表。 // 4)核心3:通过 双指针,计算所有的孪生和(即 tempSum )。 // 5)返回结果 resSum 。 var pairSum = function(head) { // 1)状态初始化:slow = head, fast = head, resSum = Number.NEGATIVE_INFINITY 。 let slow = head, fast = head, resSum = Number.NEGATIVE_INFINITY; // 2)核心1:通过 快慢指针,寻找链表中点。 while (fast !== null && fast.next !== null) { fast = fast.next.next; slow = slow.next; }// 3)核心2:反转后半部分的链表。 let cur = slow, pre = null; while (cur !== null) { let tempNode = cur.next; cur.next = pre; pre = cur; cur = tempNode; }// 4)核心3:通过 双指针,计算所有的孪生和(即 tempSum )。 while (head !== null && pre !== null) { // 4.1)根据情况,更新 resSum 值(从 resSum、tempSum 中取最大值)。 const tempSum = (head.val + pre.val); resSum = Math.max(resSum, tempSum); head = head.next; pre = pre.next; }// 5)返回结果 resSum 。 return resSum; }

四 资源分享 & 更多 1 历史文章 - 总览
2130、链表最大孪生和|2130、链表最大孪生和 | 算法(leetode,附思维导图 + 全部解法)300题
文章图片

2130、链表最大孪生和|2130、链表最大孪生和 | 算法(leetode,附思维导图 + 全部解法)300题
文章图片

2 【资源分享】算法通关 + 面试宝典算法通关 + 面试宝典
1)算法通关40讲(极客 - 外企大佬讲的): 链接: https://pan.baidu.com/s/1C175QEmcAunjnCzYzoLBz 提取码: hjna2)动态规划专题(价值几百美刀~):https://www.bilibili.com/video/BV1nt4y1Y7nz3)前端面经: 3.1)https://www.nowcoder.com/tutorial/96 3.2)https://muyiy.cn/question 3.3)https://hub.fastgit.org/haizlin/fe-interview/blob/master/category/history.md注:若失效请前往VX公众号: 码农三少 ,发送关键字: LeetCode 或 算法 ,即可获取最新的链接~

2130、链表最大孪生和|2130、链表最大孪生和 | 算法(leetode,附思维导图 + 全部解法)300题
文章图片

3 博主简介
码农三少 ,一个致力于编写 极简、但齐全题解(算法) 的博主。
专注于 一题多解、结构化思维 ,欢迎一起刷穿 LeetCode ~
2130、链表最大孪生和|2130、链表最大孪生和 | 算法(leetode,附思维导图 + 全部解法)300题
文章图片

    推荐阅读