- LeetCode 1027. 最长等差数列
- 题目描述
- 一、解题关键词
- 二、解题报告
- 1.思路分析
- 2.时间复杂度
- 3.代码示例
- 2.知识点
- 总结
- 相同题目
给你一个整数数组 nums,返回 nums 中最长等差子序列的长度。
回想一下,nums 的子序列是一个列表 nums[i1], nums[i2], …, nums[ik] ,且 0 <= i1 < i2 < … < ik <= nums.length - 1。并且如果 seq[i+1] - seq[i]( 0 <= i < seq.length - 1) 的值都相同,那么序列 seq 是等差的。
示例 1:
输入:nums = [3,6,9,12]
输出:4
解释: 整个数组是公差为 3 的等差数列。
LeetCode 1027. 最长等差数列
提示:
2 <= nums.length <= 1000
0 <= nums[i] <= 500
一、解题关键词
二、解题报告
1.思路分析
2.时间复杂度
3.代码示例
class Solution {
public int longestArithSeqLength(int[] nums) {
int len = nums.length;
if(len == 0) return 0;
Map<Integer,Map<Integer,Integer>> map = new HashMap<>();
int res = 1;
for(int i = 0; i < len;i++){
map.put(i,new HashMap<>());
for(int j = i - 1;j >= 0; j--){
if(map.get(i).containsKey(nums[i] - nums[j]))continue;
int cur = map.get(j).getOrDefault(nums[i] - nums[j],0);
res = Math.max(res,cur + 2);
map.get(i).put(nums[i] - nums[j],cur + 1);
}
}
return res;
}
}
2.知识点
总结 相同题目1、因为是比较 所以一定会进行遍历
2、需要在每次位置存储特定的信息(类比动态规划)
3、特定位置信息的存取 更新 就是这个问题的难点
4、仔细思考第三步
xxx
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)