
<아이디어>
구현 문제를 푸는 방법처럼 노드의 맨끝과 맨처음에서 점차 한 칸씩 앞으로 이동 하면서 합계를 구하고 최대값을 반환
맨끝에 존재하는 노드에서 한 칸씩 앞으로 가는 방법은 재귀를 이용하여 구현
<풀이 코드>
class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
class Solution {
// 시간 복잡도 O(n) 공간 복잡도 O(n)
private int ans=Integer.MIN_VALUE;
private ListNode start;
// 제일 뒤에 노드와 제일 앞의 노드의 합계를 구하고 ans에 최대값을 저장
public void addEachStartNodeEndNode(ListNode end){
// 제일 맨 끝 노드로 이동
if(end==null)
return;
addEachStartNodeEndNode(end.next);
ans = Math.max(ans,(end.val+start.val));
start = start.next;
}
public int pairSum(ListNode head) {
start = head;
ListNode end = head;
addEachStartNodeEndNode(end);
return ans;
}
}
public class MaximumTwinSumofaLinkedList {
}'PS > Medium' 카테고리의 다른 글
| 1557. Minimum Number of Vertices to Reach All Nodes (Graph) (0) | 2023.05.18 |
|---|---|
| 24. Swap Nodes in Pairs (0) | 2023.05.16 |
| 319. Bulb Switcher (Math) (0) | 2023.04.27 |
| 946. Validate Stack Sequences (Stack) (0) | 2023.04.13 |
| 71. Simplify Path (Stack) (0) | 2023.04.12 |