您的位置:首页 > 其它

华为机试测试- 求有序数组中最长的等差序列

2015-09-23 16:18 453 查看
原题目是求一个无序数组中最长的等差数列。
求随机数构成的数组中找到长度大于=3 的最长的等差数列, 输出等差数列由小到大:
如果没有符合条件的就输出
格式:
输入[1,3,0,5,-1,6]
输出[-1,1,3,5]

思路:
1、排序
2、d的取值范围是[0,max-min],共有max-min+1种情况
3、对每一种情况进行查找
4、对于公差d,要求最长的等差序列,需要两个循环,一个外循环从头到尾遍历,内循环从外循环的起始遍历点开始利用公式 arr[i]=arr[start]+len*d,假如符合就长度加1假如大于就跳出循环。

public static void getProgressArray(int[] array ,int d)
{
int size=array.length;
int maxLenStart=0;//最大数组的开始位置
int maxLen=0;//最大长度
int startIndex=0;//起始位置
for(;startIndex<size-maxLen;startIndex++)
{
int pLen=1;
for(int i=startIndex+1;i<size;i++)
{
if(array[i]==(array[startIndex]+d*pLen))
{
pLen++;
if(pLen>maxLen)
{
maxLenStart=startIndex;
maxLen=pLen;
}
}
else if(array[i]>(array[startIndex]+d*pLen))
{
break;
}
}
}
int [] arr=new int[maxLen];
for(int i=0;i<maxLen;i++)
{
arr[i]=array[maxLenStart]+i*d;
}
System.out.println(Arrays.toString(arr));
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: