链接:点击打开链接
题意:给出n个数,找出一串最长的连续等差数列或者等比数列
代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
using namespace std;
int a[1000005];
int main(){
int t,i,j,n,d1,ans,len1,len2;
double d2;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
ans=len1=len2=2;
d1=a[2]-a[1];
d2=a[2]*1.0/a[1];
for(i=3;i<=n;i++){ //尺取,因为是一个连续区间因此
if(a[i]-a[i-1]==d1){ //不断进行比较
len1++;
ans=max(ans,len1);
}
else{
d1=a[i]-a[i-1];
len1=2;
}
if(a[i]*1.0/a[i-1]==d2){
len2++;
ans=max(ans,len2);
}
else{
d2=a[i]*1.0/a[i-1];
len2=2;
}
}
if(n==1) //一个数时特判
ans=1;
printf("%d\n",ans);
}
return 0;
}