​力扣解法汇总1027. 最长等差数列

news/2024/7/5 6:35:34

目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:力扣


描述:

给你一个整数数组 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 的等差数列。

示例 2:

输入:nums = [9,4,7,2,10]
输出:3
解释:
最长的等差子序列是 [4,7,10]。

示例 3:

输入:nums = [20,1,15,3,10,5,8]
输出:4
解释:
最长的等差子序列是 [20,15,10,5]。

提示:

  • 2 <= nums.length <= 1000
  • 0 <= nums[i] <= 500

解题思路:

* 解题思路:
* 这题的核心就是如何设计一个动态规划的数据源。
* 我们设计一个二维数组dp,dp[i][diff]代表以第i位结束,并且差值为diff的等差数列的最大长度。
* 所以如果我们求dp[i+1][diff],则需要遍历从1到i位置上,所有的可能。
* 比如nums[i+1]-nums[i]=5,则dp[i+1][5]=dp[i][5]+1;
* 比如nums[i+1]-nums[i-1]=3,则dp[i+1][5]=dp[i-1][3]+1;
* 这样,就出i+1位置所有的等差数列的最大长度。
* 就这样遍历,直到结束,求出最大值。

代码:

public class Solution1027 {

    public int longestArithSeqLength(int[] nums) {
        int[][] dp = new int[nums.length][1001];
        int max = 0;
        for (int i = 0; i < nums.length; i++) {
            int value = nums[i];
            for (int j = 0; j < i; j++) {
                int diff = value - nums[j] + 500;
                int maxLength = dp[j][diff];
                dp[i][diff] = maxLength + 1;
                max = Math.max(max, dp[i][diff]);
            }
        }
        return max + 1;
    }
}


http://lihuaxi.xjx100.cn/news/1063882.html

相关文章

JavaScript数组常用方法

JavaScript数组常用方法 方法名语法作用返回值原数组示例push数组名.push(数据)往数组末尾添加数据原数组的长度是var arr [10, 20, 30, 40]res arr.push(20)console.log(arr);//[10,20,30,40,20]console.log(res);//5unshift数组名.unshift(数据)往数组头部添加数据原数组的…

React中使用Redux Toolkit

*Redux Toolkit 是官方推荐的编写 Redux 逻辑的方法**。 Redux Toolkit介绍 Redux Toolkit 是官方推荐的编写 Redux 逻辑的方法。 在我们日常react项目中使用Redux状态管理的时候应该已经发现&#xff0c;redux的编写逻辑过于的繁琐和麻烦。 并且代码通常分拆在多个文件中(虽…

java数据类型的转换以及精度丢失

java数据类型的转换以及精度丢失_long转double会丢失精度吗_ღLiJia的博客-CSDN博客 一.浮点类型在计算机当中的存储 float存储需求是4字节&#xff08;32位&#xff09;, 其中1位最高位是符号位&#xff0c;中间8位表示阶位&#xff0c;后32位表示值 float的范围: -2^128 ~ …

【JavaEE初阶】多线程(二)线程状态以及多线程安全问题

摄影分享~~ 文章目录 线程的状态多线程带来的风险线程安全线程安全的原因解决线程不安全问题&#xff08;加锁&#xff09;synchronized关键字-监视器锁monitor locksynchronized的特性 java中的死锁问题死锁死锁的三个典型情况死锁的四个必要条件如何避免死锁&#xff1f; J…

IDEA下SpringBoot指定配置文件启动项目

目录 一. idea下的SpringBoot启动&#xff1a;指定配置文件 二. 项目已打包&#xff0c;运行配置 1&#xff09;.使用java -jar启动基于(一)下的配置文件启动 2&#xff09;指定项目内其它配置文件application-pro.yml启动项目 3&#xff09; Linux服务器上启动基于(三)的…

数据库基础篇 《6. 多表查询》

目录 1. 一个案例引发的多表连接 1.1 案例说明 1.2 笛卡尔积&#xff08;或交叉连接&#xff09;的理解 1.3 案例分析与问题解决 2. 多表查询分类讲解 分类1&#xff1a;等值连接 vs 非等值连接 等值连接 非等值连接 ​编辑 分类2&#xff1a;自连接 vs 非自连接 分类3&…

经典数据结构之2-3树

2-3树定义 2-3树&#xff0c;是最简单的B-树&#xff0c;其中2、3主要体现在每个非叶子节点都有2个或3个子节点&#xff0c;B-树即是平衡树&#xff0c;平衡树是为了解决不平衡树查询效率问题&#xff0c;常见的二叉平衡书有AVL树&#xff0c;它虽然提高了查询效率&#xff0c…

【小样本分割 2020 ICCV】PANet

文章目录 【小样本分割 2020 ICCV】PANet1. 简介2. 网络2.1 整体架构2.2 原型学习2.3 非参数度量学习2.4 原型对齐正则化 3. 代码3.1 backbone3.2 模型代码 【小样本分割 2020 ICCV】PANet 论文题目&#xff1a;PANet: Few-Shot Image Semantic Segmentation with Prototype Al…