题目:
给你一个整数数组 nums,返回 nums 中最长等差子序列的长度。
回想一下,nums 的子序列是一个列表 nums[i1], nums[i2], ..., nums[ik] ,且 0 <= i1 < i2 < ... < ik <= nums.length - 1。并且如果 seq[i+1] - seq[i]( 0 <= i < seq.length - 1) 的值都相同,那么序列 seq 是等差的。
算法:
方法一:动态规划
func longestArithSeqLength(nums []int) int {
maxLen := 0
n := len(nums)
dp := make([][]int, n)
for i := range dp {
dp[i] = make([]int, 1001)
}
for k := 1; k < n; k ++ {
for j := 0; j < k; j ++ {
d := nums[k] - nums[j] + 500
dp[k][d] = dp[j][d] + 1
if dp[k][d] > maxLen {
maxLen = dp[k][d]
}
}
}
return maxLen + 1
}