标题:C++怎么求最长等差子序列
只看楼主
Jason_
Rank: 2
来 自:浙江台州
等 级:论坛游民
帖 子:88
专家分:66
注 册:2019-7-14
结帖率:66.67%
 问题点数:0 回复次数:2 
C++怎么求最长等差子序列
题目描述
 给你一个以正整数构成的序列,求它的最长等差子序列的长度(至少为3)
若该序列不存在,则输出No Answer
输入
 两行,第一行,序列中的正整数数目N。
 第二行,N个整数来描述这个序列。
 输出
 一个整数,表示这个序列的最长等差子序列的长度。
 样例
 输入  复制
5
 2 1 4 3 6
输出  
3

如题,其中数据范围是1≤N≤5,000,0≤|序列元素|≤1000
搜索更多相关主题的帖子: C++ 最长 输出 子序列 序列 
2022-01-26 22:13
不会游泳的虾
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:101
专家分:643
注 册:2021-7-1
得分:0 
供参考:
程序代码:
#include <stdio.h>
#include <malloc.h>
#define max(x, y)   (x) > (y) ? (x) : (y)
#define N 5001
int maxlength(int* a, int n)
{
    int i, j, m;
    if (n <= 2) return 2;
    if (n == 3)
        return a[2] - a[1] == a[1] - a[0] ? 3 : 2;
    int** dp = (int**)malloc(sizeof(int*) * n);
    for (i = 0; i < n; i++)
        dp[i] = (int*)malloc(sizeof(int) * n);
    for (i = 0; i < n ; ++i) {
        for (j = i + 1; j < n; ++j) {
            dp[i][j] = 2;
        }
    }
    int res = 2;
    for (i = 1; i < n; ++i) {
        for (j = i + 1; j < n; ++j) {
            for (m = 0; m < i; ++m) {
                if (a[j] - a[i] == a[i] - a[m]) {
                    dp[i][j] = max(dp[i][j], dp[m][i] + 1);
                }
            }
            res = max(dp[i][j], res);
        }
    }
    for (i = 0; i < n; i++)
        free(dp[i]);
    free(dp);
    return res; //返回最长等差序列长度
}
int main()
{
    int a[N] = { 0 }, i, max = 0, n;  //{ 2,1,4,3,6 } { 9,4,7,2,10 }
    scanf("%d", &n);
    for (i = 0; i < n; i++)
        scanf("%d", &a[i]);
    max = maxlength(a, n);
    if (max >= 3)
        printf("%d", max);
    else
        printf("No Answer");
    return 0;
}


[此贴子已经被作者于2022-3-2 08:47编辑过]

2022-02-25 16:12
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
得分:0 
leetcode 上有答案及分析

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2022-03-11 19:27



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-508237-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.388599 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved