1027. 最长等差数列

50 阅读1分钟

题目:
给你一个整数数组 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
}