728x90
https://leetcode.com/problems/length-of-longest-fibonacci-subsequence/description/
디피는 확실히 복잡한듯...
재귀로도 풀어보고 여러방법으로 풀어봤는데
연속되는 피보나치에 대한 구현법에 애를 많이먹었습니다...
a -> b -> c 가 피보나치일때
a 까지의 가장 긴 서브 피보나치가 있다면
그 수만큼 b -> c 에 더해줍니다.
a 까지의 가장 긴 서브 피보나치가 없다면
b -> c 는 3입니다 (작은 값 부터 반복문을 돌렸을 뿐더러 a->b->c 인 3가지 크기밖에 경우의 수가 없음)
from typing import List
class Solution:
def lenLongestFibSubseq(self, arr: List[int]) -> int:
dp = {}
# 파이썬 Set 은 해시태이블로 구현되어있어서 in 연산시 시간복잡도가 O(1)
s = set(arr)
for i in range(len(arr)):
for j in range(i + 1, len(arr)):
if arr[j] - arr[i] < arr[i] and arr[j] - arr[i] in s:
dp[arr[i], arr[j]] = dp.get((arr[j] - arr[i], arr[i]), 2) + 1
return max(dp.values() or [0])
728x90
'PS > 릿코드' 카테고리의 다른 글
[릿코드 2187] Minimum Time to Complete Trips (파이썬/python) (0) | 2023.03.07 |
---|---|
[릿코드 2] Add Two Numbers (파이썬/python) (0) | 2023.03.06 |
[릿코드 1557] Minimum Number of Vertices to Reach All Nodes (파이썬/python) (0) | 2023.03.02 |
[릿코드 638] Shopping Offers (파이썬/python) (0) | 2023.02.23 |
[릿코드 86] Partition List (파이썬/python) (0) | 2023.02.23 |