您的位置:首页 > 其它

求数组的最长递增子序列

2018-03-11 15:34 337 查看
题目描述:给定长度为N的数组A,计算A的最长的单调递增的子序列(不一定连续)。
如:给定数组A{5,6,7,1,2,8},则A的最长单调连续子序列为{5,6,7,8},长度为4

算法设计:借助栈,遍历一遍数组,如果当前栈为空,直接压栈,如果当前数字大于栈定元素,直接压栈,如果当前元素小于栈定元素,则替换栈中第一个比当前元素大的元素
public static void main(String[] args) {
Integer[] array = new Integer[7];
array[0] = 1;
array[1] = 4;
array[2] = 6;
array[3] = 2;
array[4] = 8;
array[5] = 9;
array[6] = 7;
int len = 1;
for(int i = 1; i < array.length; i++){
len = replaceNum(array,len,array[i]);
}
for(int i = 0;i < len;i++){
System.out.println(array[i]);
}
}

/**
* 在array中查询第一个比replaceNum大的数组,并替换他
* 说明array是有序的
* @param array
* @param len
* @param replaceNum
*/
public static int replaceNum(Integer[] array, int len, Integer replaceNum){
if(replaceNum > array[len - 1]){
array[len] = replaceNum;
return len + 1;
}
int low = 0;
int high = len- 1;
while(low < high){
int mid = (high + low)/2;
int midNum = array[mid];
if(replaceNum <= midNum){
high = mid;
}else{
low = mid + 1;
}
}
array[low] = replaceNum;
return len;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: