随机数结成的数组中找到长度大于=3的最长的等差数列
随机数构成的数组中找到长度大于=3的最长的等差数列
来自:http://www.iteye.com/problems/64504?page=2
看了帖子,就随便写了一个,你的效率高,不妨贴出来看看??
来自:http://www.iteye.com/problems/64504?page=2
@SuppressWarnings("unchecked") private static void getArithmeticProgression(int[] array) { /* 排序 */ Arrays.sort(array); /* 存放最大等差数列的容器 */ ArrayList<Integer> maxList = new ArrayList<Integer>(); /* 存放等差数列的临时容器 */ ArrayList<Integer> tmpList = new ArrayList<Integer>(); int len = array.length; for (int i = 0; i < len; i++) { for (int j = i + 1; j < len; j++) { /* 清空list */ tmpList.clear(); /* 添加数列的第一个元素 */ tmpList.add(i); /* 添加数列的第二个元素*/ tmpList.add(j); /* 当前数列的元素个数 */ int num = 2; /* 等差 */ int progression = array[j] - array[i]; /* 当前元素位置 */ int current = j; /* 下一个元素位置 */ int next = j + 1; /* 从current开始遍历*/ while (next < len) { /*下一个元素和当前元素是等差数列*/ if (array[next] - array[current] == progression) { tmpList.add(next); current = next; num++; } next++; } /* 设定最大等差数列*/ if (num >= maxList.size()) { maxList = (ArrayList<Integer>)tmpList.clone(); } } } /* 输出结果 */ for (Integer o : maxList) { System.out.println(array[o]); } }
1 楼
chriszeng87
2011-08-30
这个效率也太低了吧
2 楼
hudingchen
2011-09-02
chriszeng87 写道
这个效率也太低了吧
看了帖子,就随便写了一个,你的效率高,不妨贴出来看看??