Skip to content

1087. Longest Arithmetic Subsequence

Array Hash Table Binary Search Dynamic Programming

Problem - Longest Arithmetic Subsequence

Medium

Given an array nums of integers, return the length of the longest arithmetic subsequence in nums.

Note that:

  • A subsequence is an array that can be derived from another array by deleting some or no elements without changing the order of the remaining elements.
  • A sequence seq is arithmetic if seq[i + 1] - seq[i] are all the same value (for 0 <= i < seq.length - 1).

 

Example 1:

Input: nums = [3,6,9,12]
Output: 4
Explanation:  The whole array is an arithmetic sequence with steps of length = 3.

Example 2:

Input: nums = [9,4,7,2,10]
Output: 3
Explanation:  The longest arithmetic subsequence is [4,7,10].

Example 3:

Input: nums = [20,1,15,3,10,5,8]
Output: 4
Explanation:  The longest arithmetic subsequence is [20,15,10,5].

 

Constraints:

  • 2 <= nums.length <= 1000
  • 0 <= nums[i] <= 500

Solutions

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
class Solution:
    def longestArithSeqLength(self, nums: List[int]) -> int:
        n = len(nums)
        dp = [[1] * (1000) for _ in range(n)]
        result = 0

        for i in range(1, n):
            for k in range(i):
                j = nums[i] - nums[k]
                dp[i][j] = max(dp[i][j], dp[k][j] + 1)
                result = max(result, dp[i][j])

        return result

Submission Stats:

  • Runtime: 2123 ms (35.64%)
  • Memory: 25.4 MB (92.26%)