思路:利用哈希表存放已出现的数和长度,遍历数组arr,查找符合子序列要求的的前一个元素。即遍历到arr[i]时,在哈希表中查找值等于arr[i]-difference的元素,设该元素为j,若arr[j]已在哈希表中出现,获取其长度len,表示以arr[j]结尾的等差数列有len个数,则arr[i]存入哈希表时长度为len+1;若j不存在,则arr长度为1。
代码:
class Solution {
public int longestSubsequence(int[] arr, int difference) {
int max=1;
HashMap<Integer,Integer> map = new HashMap<>();
for(int i=0;i<arr.length;i++){
Integer l=map.get(arr[i]-difference);
if(l!=null){
map.put(arr[i],l+1);
max = Math.max(max,l+1);
}else{
map.put(arr[i],1);
}
}
return max;
}
}