解法:
動態規劃解題。我遍歷數組,遍歷到某個元素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;
}