题目描述
题目:给定一个数组求出数组最长等差数列的长度。
举例:3,8,4,5,6,2
输出:5。
思路
典型的动态规划问题,但是注意此题的动态规划不能简单用一个dp数组就可以得出长度,应该在用一个表示最长长度的变量来随时更新为每一次遍历的最长长度。
思想为:dp[i][diff]表示第i个数,等差为diff的长度。
dp[i][diff] = dp[j][diff] + 1,j < i
代码
package com.special.pra;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
/**
* 求最长等差数列的长度
* 运用动态规划
* 1.首先对数组array进行排序
* 2.数组长度为length = array.length - 1,然后差最大为最大值减去最小值为diff
* 3.进行dp[length][diff + 1]
* 则dp[i][diff] 表示 第i个数 等差为 diff的个数
* 显然有 dp[i][diff] = dp[j][diff] + 1,其中j < i
* @author special
*