1027. Longest Arithmetic Subsequence
mediumFind the length of the longest arithmetic subsequence in an array. 2D DP keyed on (index, common difference) — every pair (i, j) with j < i extends some sequence ending at j with difference nums[i] - nums[j].
By Sam K., Founder, InterviewChamp.AI · Last verified
Problem
Given an array nums of integers, return the length of the longest arithmetic subsequence in nums. Note that: A subsequence of an array is a list nums[i1], nums[i2], ..., nums[ik] with 0 <= i1 < i2 < ... < ik <= nums.length - 1. A sequence seq is arithmetic if seq[i + 1] - seq[i] are all the same value (for 0 <= i < seq.length - 1).
Constraints
2 <= nums.length <= 10000 <= nums[i] <= 500
Examples
Example 1
nums = [3,6,9,12]4Explanation: The whole array is an arithmetic sequence with steps of length = 3.
Example 2
nums = [9,4,7,2,10]3Explanation: The longest arithmetic subsequence is [4,7,10].
Example 3
nums = [20,1,15,3,10,5,8]4Explanation: The longest arithmetic subsequence is [20,15,10,5].
Solve it now
Free. No sign-up. Python and JavaScript run instantly in your browser.
Hints
Progressive — try the first before opening the next.
Hint 1
Define dp[i][d] = length of the longest arithmetic subsequence ending at index i with common difference d.
Hint 2
For each pair (j, i) with j < i: d = nums[i] - nums[j]. dp[i][d] = max(dp[i][d], dp[j][d] + 1) (extend), with dp[i][d] at least 2 (the pair (j, i) alone).
Hint 3
Use a hash map per index since d can be negative or large.
Hint 4
Global answer is the maximum value across all (i, d). O(n^2) time.
Solution approach
Reveal approach
Bottom-up DP indexed by (end position, common difference). Maintain dp[i] as a hash map from difference d to the length of the longest arithmetic subsequence ending at index i with that difference. For each pair (j, i) with j < i, compute d = nums[i] - nums[j], then dp[i][d] = (dp[j].get(d, 1)) + 1 — extending whichever sequence ended at j with the same d, defaulting to 1 if there is no such sequence yet (so two elements alone give length 2). Track the global max as you fill. Time O(n^2), space O(n^2) in the worst case. Listed in dp-2d because the state is genuinely (i, d) — a 2D table when d is bounded, a 2D hash structure otherwise.
Complexity
- Time
- O(n^2)
- Space
- O(n^2)
Related patterns
- dynamic-programming
- hash-map
Related problems
Asked at
Companies reported asking this problem (sourced from public Glassdoor, Blind, and Levels.fyi interview posts).
- Amazon
More 2D Dynamic Programming practice problems
- 5. Longest Palindromic Substring
- 10. Regular Expression Matching
- 44. Wildcard Matching
- 63. Unique Paths II
- 64. Minimum Path Sum
- 85. Maximal Rectangle
- 97. Interleaving String
- 115. Distinct Subsequences