分析
题目描述比较简单,但是有一个问题我们需要首先搞清楚:等差数列中的数字,是否要和原始数组中的顺序一致。题目中,并没有说明,这个就需要大家在面试的过程中和面试官进行交流。
该题针对数字在原始数组中有序排列。
#include <stdio.h>
#include <string.h>int max_len = 1;
//int array[]={2, 3 ,5 ,7 ,8 ,4 ,9, 5 ,10, 6 };
int array[]={1, 1 ,1 ,2, 2, 3 ,3, 4, 4, 5};
#define SIZE(a) sizeof(a)/sizeof(a[0])
int map[100][100];
int main()
{
int i, j;
memset(map, 0, sizeof(int)*100*100);
for(i=1;i<SIZE(array);i++) {
for(j=0;j<i;j++) {
int diff = array[i] - array[j];
if(map[j][diff] == 0) {
map[i][diff] = 2;
} else {
int new_len = map[j][diff] + 1;
map[i][diff] = new_len;
max_len = new_len > max_len ? new_len : max_len;
}
}
}
printf("%d\n", max_len);
return 0;
}