解法:
动态规划解题。我遍历数组,遍历到某个元素x,我想知道以它为结尾的等差子数列的最大长度是多少。那我需要知道这个元素x之前的 以(x-difference)结尾的等差子数列的最大长度,然后再加一就行了。这就是动态规划的思想。然后我找到最长的长度就行了。
代码如下:
public int longestSubsequence(int[] arr, int difference) {
// 动态规划解题
int res = 1;
HashMap<Integer, Integer> hashMap = new HashMap<>();
for (int num : arr) {
if (hashMap.containsKey(num - difference)) {
int tmp = hashMap.get(num - difference) + 1;
if (tmp > res) res = tmp;
hashMap.put(num, tmp);
} else {
hashMap.put(num, 1);
}
}
return res;
}