LeetCode 1027. 最长等差数列

LeetCode 1027. 最长等差数列

题目描述

给你一个整数数组 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大涛小先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值