日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 2130. 链表最大孪生和(链表快慢指针+反转链表+双指针)

發(fā)布時間:2024/7/5 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 2130. 链表最大孪生和(链表快慢指针+反转链表+双指针) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

    • 1. 題目
    • 2. 解題

1. 題目

在一個大小為 n 且 n 為 偶數(shù) 的鏈表中,對于 0 <= i <= (n / 2) - 1 的 i ,第 i 個節(jié)點(diǎn)(下標(biāo)從 0 開始)的孿生節(jié)點(diǎn)為第 (n-1-i) 個節(jié)點(diǎn) 。

  • 比方說,n = 4 那么節(jié)點(diǎn) 0 是節(jié)點(diǎn) 3 的孿生節(jié)點(diǎn),節(jié)點(diǎn) 1 是節(jié)點(diǎn) 2 的孿生節(jié)點(diǎn)。這是長度為 n = 4 的鏈表中所有的孿生節(jié)點(diǎn)。

孿生和 定義為一個節(jié)點(diǎn)和它孿生節(jié)點(diǎn)兩者值之和。

給你一個長度為偶數(shù)的鏈表的頭節(jié)點(diǎn) head ,請你返回鏈表的 最大孿生和

示例 1:

輸入:head = [5,4,2,1] 輸出:6 解釋: 節(jié)點(diǎn) 0 和節(jié)點(diǎn) 1 分別是節(jié)點(diǎn) 32 的孿生節(jié)點(diǎn)。孿生和都為 6 。 鏈表中沒有其他孿生節(jié)點(diǎn)。 所以,鏈表的最大孿生和是 6

示例 2:

輸入:head = [4,2,2,3] 輸出:7 解釋: 鏈表中的孿生節(jié)點(diǎn)為: - 節(jié)點(diǎn) 0 是節(jié)點(diǎn) 3 的孿生節(jié)點(diǎn),孿生和為 4 + 3 = 7- 節(jié)點(diǎn) 1 是節(jié)點(diǎn) 2 的孿生節(jié)點(diǎn),孿生和為 2 + 2 = 4 。 所以,最大孿生和為 max(7, 4) = 7

示例 3:

輸入:head = [1,100000] 輸出:100001 解釋: 鏈表中只有一對孿生節(jié)點(diǎn),孿生和為 1 + 100000 = 100001 。提示: 鏈表的節(jié)點(diǎn)數(shù)目是 [2, 10^5] 中的 偶數(shù) 。 1 <= Node.val <= 10^5

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/maximum-twin-sum-of-a-linked-list
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

2. 解題

  • 快慢指針找到鏈表的中點(diǎn),斷開
  • 反轉(zhuǎn)后面一段鏈表
  • 雙指針從首尾開始遍歷,求首尾的和
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/ class Solution { public:int pairSum(ListNode* head) {ListNode *fast = head, *slow = head, *prev = NULL;while(fast && fast->next){fast = fast->next->next;prev = slow;slow = slow->next;}prev->next = NULL;ListNode* end = reverse(slow);int maxsum = -1;while(end && head){maxsum = max(maxsum, end->val + head->val);end = end->next;head = head->next;}return maxsum;}ListNode* reverse(ListNode *head){if(!head || !head->next) return head;ListNode *prev = NULL, *cur = head, *next = NULL;while(cur){next = cur->next;cur->next = prev;prev = cur;cur = next;}return prev;} };

208 ms 113.8 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

長按或掃碼關(guān)注我的公眾號(Michael阿明),一起加油、一起學(xué)習(xí)進(jìn)步!

總結(jié)

以上是生活随笔為你收集整理的LeetCode 2130. 链表最大孪生和(链表快慢指针+反转链表+双指针)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。