思路:利用哈希表存放已出现的数和长度,遍历数组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;
}
}
这篇博客介绍了如何通过哈希表来高效地寻找整数数组中的最长等差子序列。算法核心是利用哈希表存储已出现的数及其长度,遍历数组时查找差值匹配的前一个数,更新子序列长度并比较最大值。这种方法有效地解决了动态规划问题,提高了搜索效率。
291

被折叠的 条评论
为什么被折叠?



