在一个升序排列好的数列里面找到最长的等差数列
2011-05-24 16:37
232 查看
http://topic.csdn.net/u/20110523/09/7ED00E45-9557-411B-8FCE-6C54DDFEA1F2.html
题目需求:
在一个升序排列好的数列里面找到最长的等差数列
例子:1 3 5 6 8 9 10 12 13 14
子数列有(两项的不在列举)
1 3 5
1 5 9 13
3 6 9 12
3 8 13
5 9 13
.....
得出的最长的等差数列应该是:6 8 10 12 14
我的解法如下:两个for循环加一个递归;
结果打印如下:
1,3,5
1,5,9,13
3,6,9,12
3,8,13
5,9,13
6,8,10,12,14
6,9,12
6,10,14
8,9,10
8,10,12,14
10,12,14
12,13,14
6,8,10,12,14
题目需求:
在一个升序排列好的数列里面找到最长的等差数列
例子:1 3 5 6 8 9 10 12 13 14
子数列有(两项的不在列举)
1 3 5
1 5 9 13
3 6 9 12
3 8 13
5 9 13
.....
得出的最长的等差数列应该是:6 8 10 12 14
我的解法如下:两个for循环加一个递归;
private var result:ArrayCollection; private var arrayCol:ArrayCollection=new ArrayCollection([1, 3, 5, 6, 8, 9, 10, 12, 13, 14]); protected function button1_clickHandler(event:MouseEvent):void { var finalArray:ArrayCollection=new ArrayCollection();//最终结果数组 var tempLength:int=arrayCol.length;//数组长度 for (var i:int=0; i < tempLength - 1; i++) { var currentValue:int=arrayCol[i]; for (var j:int=i + 1; j < tempLength; j++) { var tempValue:int=arrayCol[j]; result=new ArrayCollection(); result.addItem(currentValue); result.addItem(tempValue); getResultArrayCol(currentValue, tempValue, arrayCol);//获得等差数列数组; if (result.length > 2) { finalArray.addItem(result); trace(result); } } } if (finalArray.length == 0) { return; } var maxlength:int=0; for (i=0; i < finalArray.length; i++) { var arr1:ArrayCollection=finalArray[i]; if (arr1.length >maxlength) { maxlength=i; } } trace(ArrayCollection(finalArray[maxlength])); } //递归遍历 protected function getResultArrayCol(curr:int, next:int, source:ArrayCollection):void { if (source.contains(next + next - curr)) { result.addItem(next + next - curr); getResultArrayCol(next, next + next - curr, source); } else { return; } }
结果打印如下:
1,3,5
1,5,9,13
3,6,9,12
3,8,13
5,9,13
6,8,10,12,14
6,9,12
6,10,14
8,9,10
8,10,12,14
10,12,14
12,13,14
6,8,10,12,14
相关文章推荐
- 数列按升序排列,有一个数字排错,如何纠错?
- 给定一个数列a1,a2,a3,...,an和m个三元组表示的查询,对于每个查询(i,j,k),输出ai,ai+1,...,aj的升序排列中第k个数。
- 编写函数,将大小为10的数组里面的整数升序排列,并编写一个函数,使得插入一个数之后,数组里面的整数依然按照升序排列
- 给定一个数列a1,a2,a3,...,an和m个三元组表示的查询,对于每个查询(i,j,k),输出ai,ai+1,...,aj的升序排列中第k个数。
- 查资料无意中找到一个网址,里面有好多脚本都是之前想找的
- Find Minimum in Rotated Sorted Array II:带重复的数组中找到升序数列的转折点
- 给定一个字符串,找到最长的子串的长度没有重复字符
- 传入一个数组,输出这个数组里面的所有排列
- 2 个按升序(从小到大)排列的数列 A[1],A[2],....,A[M]和 B[1],B[2],...,B[N]中各元素按其大小关系存放到数组 C。同时必须注意对数组 A 或 B 残余元素的追加处理。(数组 A、B 中初始元素数量自定,数据从键盘输入。)
- 求整数随机数构成的数组中找到最长的等差数列
- 有两个升序排列的数组A1和A2,给A1开辟的剩余内存有足够空间容纳A1,请实现一个函数,把A2中所有数字插入到A1中,并且是按照升序排列的
- 在一个有序数列中找到第一个比x大的数的位置
- 面试题:给定一个数组,数组中只包含0和1。请找到一个最长的子序列,其中0和1的数量是相同的
- 有两个升序排列的数组A1和A2,给A1开辟的剩余内存有足够空间容纳A1,请实现一个函数,把A2中所有数字插入到A1中,并且是按照升序排列的
- 对于一个m*n的整数矩阵,其中每一行和每一列的元素都按升序排列,设计一个高效的算法判断一个数值是否存在,并给出位置
- 如何设置在elipse里面选中一个变量,找到该页面用到该变量的所有的地方
- 通过递归判断一个整形数组是否按升序排列(java实现)
- 编程珠矶 习题 4.6 利用二分搜索找到一个数在顺序数组里面的下限和上限
- 【每日面试题】随机数构成的数组中找到长度大于=3 的最长的等差数列
- LeetCode 找到一个字符串数组的最长公共前缀