您的位置:首页 > 其它

在一个升序排列好的数列里面找到最长的等差数列

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循环加一个递归;

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐