快手工程B试卷最后一题

A了80%,求个牛友指点一下
import java.util.Arrays;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        if(n <= 0) {
            System.out.println(0);
            return;
        }
        int[] array = new int[n];
        for(int i = 0; i < array.length; i++) {
            array[i] = sc.nextInt();
        }
        Arrays.sort(array);
        int maxSub = array[array.length - 1] - array[0];
        // dp[i][j] 表示以第i个元素结尾的序列中,以j为差值的等差数列的最长长度
        int[][] dp = new int[n][maxSub + 1];
        Arrays.fill(dp[0], 1);
        int result = 1;
        for(int i = 1; i < n; i++) {
            for(int j = 0; j < i; j++) {
                int d = array[i] - array[j];
                dp[i][d] = dp[j][d] + 1;
                if(dp[i][d] > result) {
                    result = dp[i][d];
                }
            }
        }
        System.out.println(result);
    }
}


#快手##笔试题目##题解##校招##Java工程师#
全部评论
之前也是80%,考虑了一下公差为0,就全a了
点赞 回复 分享
发布于 2019-09-16 22:35

相关推荐

喜欢飞来飞去的雪碧在刷代码:可以试一试字节
点赞 评论 收藏
分享
评论
1
3
分享

创作者周榜

更多
牛客网
牛客企业服务