LeetCode 1027. 最长等差数列

LeetCode 1027. 最长等差数列,第1张

LeetCode 1027. 最长等差数列

文章目录
  • 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

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/735233.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-27
下一篇 2022-04-27

发表评论

登录后才能评论

评论列表(0条)

保存