最长连续等差子数列

描述:给定一个长度为N的整数数列,你需要在其中找到最长连续子数列的长度,并满足这个子数列是等差的。注意公差小于或等于0的情况也是允许的。

输入:第一行为测试数据的组数T(1<=T<=100)。请注意,任意两组测试数据之间是相互独立的。 
每组数据包含两行: 
第一行为一个整数N(1<=N<=100),表示给定数列长度。
第二行为N个正整数,其中第i个整数valuei(1<=valuei <=10^5)表示下标为i的数字。

 

#include <iostream>
#include<cstdio>
#include<string.h>
using namespace std;

int main()
{
    int T;
    cin>>T;
    while(T--){
        int N;
        scanf("%d",&N);
        int num[N];
        memset(num,0,sizeof(num));
        for(int i=0;i<N;i++)
            scanf("%d",&num[i]);
        if(N<=2)//如果长度小于等于2,就直接是等差了
            printf("%d\n",N);
        else{
            int tmp_max_len=2;
            int max_len=2;
            for(int i=2;i<N;i++){
                if((num[i]-num[i-1])==(num[i-1]-num[i-2])){
                    tmp_max_len++;
                    if(max_len<tmp_max_len)
                        max_len=tmp_max_len;
                }
                else
                    tmp_max_len=2;

            }
            printf("%d\n",max_len);
        }
    }
    return 0;
}

 

posted @ 2018-03-25 19:15  Shaw_喆宇  阅读(823)  评论(0编辑  收藏  举报