1218. 最长定差子序列
- 原题链接:
- 完成情况:
- 解题思路:
- 参考代码:
- _1218最长定差子序列
- 错误经验吸取
原题链接:
1218. 最长定差子序列
https://leetcode.cn/problems/longest-arithmetic-subsequence-of-given-difference/description/
完成情况:
解题思路:
这段代码是一个用Java编写的函数,函数名为longestSubsequence
,接受一个整型数组arr
和一个整数difference
作为参数。函数的功能是找出并返回数组arr
中最长等差子序列的长度。
在函数中,首先声明了一个整型变量result
并初始化为0,然后创建了一个HashMap
对象dp_longestSubsequence
用于存储每个元素对应的最长等差子序列长度。
接下来是一个for
循环,遍历数组arr
中的每个元素arr_i
。在循环内部,使用dp_longestSubsequence.getOrDefault(arr_i - difference, 0) + 1
的方式计算当前元素arr_i
对应的最长等差子序列长度,并将结果存入dp_longestSubsequence
中。然后通过Math.max
方法更新result
为当前最大的子序列长度。
最后,返回计算得到的最长等差子序列的长度result
。
请注意,这段代码实现的主要思想是动态规划,通过遍历数组来计算每个元素对应的最长等差子序列长度,并使用HashMap
来存储中间结果,以减少重复计算。
参考代码:
_1218最长定差子序列
package leetcode板块;import java.util.HashMap;
import java.util.Map;public class _1218最长定差子序列 {/**** @param arr* @param difference 一个整数 difference,给定了差值* @return*/public int longestSubsequence(int[] arr, int difference) {
// 1 <= arr.length <= 10^5
// -10^4 <= arr[i], difference <= 10^4// 请你找出并返回 arr 中最长等差子序列的长度int result = 0;Map<Integer, Integer> dp_longestSubsequence = new HashMap<Integer, Integer>();//已经指定了数组的差,你需要按这个差去看看有无能够与之匹配的元素即可for (int arr_i : arr){dp_longestSubsequence.put(arr_i,dp_longestSubsequence.getOrDefault(arr_i - difference,0) + 1);result = Math.max(result, dp_longestSubsequence.get(arr_i));}return result;}
}