Re: [闲聊] 每日leetcode

楼主: JIWP (JIWP)   2025-02-28 01:21:16
873. Length of Longest Fibonacci Subsequence
费波那契数列一定是超过3个数字
所以我们先固定前两个数字,在往后找有没有符合条件的数字
并且纪录最长的数列
先用一个map:rec纪录arr里的所有数字
假设数列的前两位是arr[i]、arr[j] ( i < j )
令cur = arr[j] next = arr[i]+arr[j]
先检查rec[next]是否存在
存在的话,把cur、next各自往前一位
cur = next、next = next + cur
这样找出最长的数列
func lenLongestFibSubseq(arr []int) int {
rec, ans, n := make(map[int]bool), 0, len(arr)
for _, val := range arr {
rec[val] = true
}
for i := 0; i < n; i++ {
for j := i + 1; j < n; j++ {
next := arr[i] + arr[j]
if rec[next] {
cnt, cur, next := 3, next, next+arr[j]
for rec[next] {
cnt++
cur, next = next, next+cur
}
ans = max(ans, cnt)
}
}
}
return ans
}
作者: RinNoKareshi (立石凛的男友)   2025-02-28 01:30:00
大师

Links booklink

Contact Us: admin [ a t ] ucptt.com