class Solution {
public int longestSubsequence(int[] arr, int difference) {
// int[] dp = new int[arr.length];
// //base
// Arrays.fill(dp,1);
// int ans = 0;
// //状态转移
// for(int i = 0;i<arr.length;i++){
// for(int j = 0;j < i;j++){
// if(arr[i]-arr[j]==difference){
// dp[i] = Math.max(dp[j] + 1,dp[i]);
// }
// }
// ans = Math.max(ans,dp[i]);
// }
// return ans;
int[] dp = new int[arr.length];
Map<Integer,Integer> map = new HashMap<>();
int ret = 0;
for(int i = 0; i < arr.length; i++){
dp[i] = map.getOrDefault(arr[i]-difference,0)+1;
map.put(arr[i], dp[i]);
ret = Math.max(dp[i], ret);
}
return ret;
}
}