2026年6月14日 星期日

LeetCode 解題筆記:2130. Maximum Twin Sum of a Linked List

作者:王一哲
日期:2026年6月14日


LeetCode 題目連結:2130. Maximum Twin Sum of a Linked List

解題想法


寫起來像簡單題的中等難度題。先用建一個走訪鏈結串列用的虛擬節點 dummy 並指向 head,用 while 迴圈及 dummy 掃過鏈結串列,將節點的值存到串列 nums 之中。如果 nums 的長度為 n,用 for 迴圈讀取 nums 左、右兩端的值加總,更新最大的 twin-sum。本來以為這麼直接的寫法時間排名應該很差,沒想到排名還算不錯。

Python 程式碼


Runtime: 50 ms, beats 88.51%. Memory: 63.10 MB, beats 16.16%.
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def pairSum(self, head: Optional[ListNode]) -> int:
        # 掃過鏈結串列一輸,記錄每個節點的值於串列 nums
        nums = []
        dummy = head
        while dummy:
            nums.append(dummy.val)
            dummy = dummy.next
        # 掃過 nums,取左、右兩端的值相加,更新最大的 twin sum
        imax = 0
        n = len(nums)
        for i in range(n//2):
            imax = max(imax, nums[i] + nums[n-i-1])
        return imax


C++ 程式碼


Runtime: 3 ms, beats 66.81%. Memory: 138.48 MB, beats 10.50%.
/**
 * 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) {
        // 掃過鏈結串列一輸,記錄每個節點的值於串列 nums
        vector<int> nums;
        ListNode* dummy = head;
        while(dummy != nullptr) {
            nums.push_back(dummy->val);
            dummy = dummy->next;
        }
        // 掃過 nums,取左、右兩端的值相加,更新最大的 twin sum
        int imax = 0, n = (int)nums.size();
        for(int i = 0; i < n/2; i++) {
            imax = max(imax, nums[i] + nums[n-i-1]);
        }
        return imax;
    }
};


沒有留言:

張貼留言