Algorithm 01 : 寻找最长有序子序列

[b][color=red]Question : To find max sorted contiguous subsequence of an Array.[/color][/b]

问题:查找数组中的最长有序子序列。



/**
* @author YuHuang
* @vision 2011-10-03
* This program is only for algorithm training.
*
*/


public class MaxSortedContiguousSubsequence {

private int[] rArray;

public void doSearch(int[] sArray){
int len = sArray.length;
int[] markArray=new int[len];

markArray[len-1]=0;
for(int index=len-2;index>=0;--index){
if(sArray[index]<=sArray[index+1]){
markArray[index]=markArray[index+1]+1;
}
}

int startIndex=0;
for(int index=1;index<=len-1;++index){
if(markArray[index]>markArray[startIndex]){
startIndex=index;
}
}

rArray=new int[markArray[startIndex]];
for(int index=startIndex;index<startIndex+markArray[startIndex];++index){
rArray[index-startIndex]=sArray[index];
}

}

public void printResult() {
System.out.print("Max Sorted Contiguous Subsequence : ");
for(int elem : rArray){
System.out.print(elem+" ");
}
}

public static void main(String[] args){
int[] sArray={2,3,1,2,3,4,5,2,1,3};
MaxSortedContiguousSubsequence mscs = new MaxSortedContiguousSubsequence();
mscs.doSearch(sArray);
mscs.printResult();
System.out.println();
}
}




[b][color=blue]如果有更低复杂度的算法,请告知,谢谢![/color][/b]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值