求数组的最长递增子序列

题目描述:给定长度为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;
}



猜你喜欢

转载自blog.csdn.net/junglerofchina/article/details/79516405