ID | Title | Difficulty | |
---|---|---|---|
Loading... |
1027. Longest Arithmetic Subsequence
Medium
LeetCode
Array, Hash Table, Binary Search, Dynamic Programming
Problem
Given an array nums of integers, return the length of the longest arithmetic subsequence in nums.
Recall that a subsequence of an array nums is a list nums[i1], nums[i2], …, nums[ik] with 0 <= i1 < i2 < … < ik <= nums.length - 1, and that 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].
Code
class Solution {
public int longestArithSeqLength(int[] nums) {
int res = 2;
int len = nums.length;
HashMap<Integer, Integer>[] dp = new HashMap[len];
for (int i = 0; i < len; i++) {
dp[i] = new HashMap<>();
for (int j = 0; j < i; j++) {
int diff = nums[i] - nums[j];
// 之前的数, 具有同样的diff
dp[i].put(diff, dp[j].getOrDefault(diff, 1) + 1);
res = Math.max(res, dp[i].get(diff));
}
}
return res;
}
}
按 <- 键看上一题!
1020. Number of Enclaves