2025年--Lc203- 1218. 最长定差子序列(动态规划)--Java版
1.题目
2.思路
键(key):数组中的“数值” v
值(value):遍历到当前位置为止,以数值 v 结尾、公差为 difference 的最长等差子序列长度
temp = map.getOrDefault(nums[i] - difference, 0) + 1;
map.put(nums[i], temp); // 更新“以 i 结尾”的最长长度
temp 是一个中间变量,表示:“把当前值 i 接在它的前驱值 i - difference 后面后,得到的以 i 结尾的最长等差子序列长度”。
3.代码实现
class Solution {public int longestSubsequence(int[] arr, int difference) {int res=0;Map<Integer,Integer> ma=new HashMap<>();for(int i=0;i<arr.length;i++){int tmp=ma.getOrDefault(arr[i]-difference,0)+1;ma.put(arr[i],tmp);res=Math.max(res,tmp);}return res;}
}