解題思路
題目要求兩兩對應點和的最大值。要能找到一個點的對應點,就要能找到中間在哪。
在 linked list 中找中間,可以用 two pointer。
再來觀察 two pointer,當 linked list 是偶數長度時,slow pointer 會一一走訪左半部的 node,停在中間靠右的 node。
所以可以在找中間點的同時,用 stack 紀錄點的數值。當找到中間點時,一個個 pop 出來跟當前的 node value 相加,看看是不是最大值。
程式碼
class Solution {
public:
int pairSum(ListNode* head) {
ListNode *slow, *fast;
fast = slow = head;
stack<int> st;
int maxSum = 0;
while(fast && fast->next)
{
st.push(slow->val);
slow = slow->next;
fast = fast->next->next;
}
while(slow)
{
maxSum = max(maxSum, slow->val + st.top());
st.pop();
slow = slow->next;
}
return maxSum;
}
};
沒有留言:
張貼留言