求随机数构成的数组中找到长度大于=3的最长的等差数列9 d- x' W) w9 ?" o3 b0 R
输出等差数列由小到大:
如果没有符合条件的就输出
格式:
输入[1,3,0,5,-1,6]
输出[-1,1,3,5]
要求时间复杂度,空间复杂度尽量小
public static int FindSequence(int[] a) {
int max = 0;
int maxCount = 2;
int end = -1;
Map<Integer, Integer> substracts = new HashMap<Integer, Integer>();
QuickSort.Quick_Sort(a, 0, a.length - 1);
for (int i = 1; i < a.length; i++)
for (int j = 0; j < i; j++) {
int sub = a[i] - a[j];
if(substracts.containsKey(sub)){
int value = substracts.get(sub) + 1;
substracts.put(sub, value);
if(value > maxCount){
maxCount = value;
max = sub;
end = i;
}
}
else
substracts.put(sub, 1);
}
for(int i = maxCount; i >= 0; i--)
System.out.print(a[end] - i * max + " ");
return maxCount + 1;
}