求数组的最长递增子序列
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;
}
如:给定数组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;
}
相关文章推荐
- Java求给定数组的最长递增子序列
- 求数组的最长递增子序列
- 求数组的最长递增子序列的长度
- 无序数组的最长递增子序列
- 【DP】计算一个数组的最长递增子序列
- 算法题-数组的最长递增子序列
- 求数组的最长递增子序列VS吉哥系列故事——完美队形
- 最长递增子序列
- [珠玑之椟]字符串和序列:左移、哈希、最长重复子序列的后缀数组解法、最大连续子序列
- 最长递增子序列问题的求解
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串 (转)
- 最长单调递增子序列 [转]
- 求一个数组的最长递减子序列比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5, 4,3,2}
- 数组中的最长连续序列
- [编程之美] PSet2.16 求数组中最长的递增子序列
- 数组——数组中最长连续序列
- 递增子序列最大和(最长递增子序列) 动态规划
- 面试题:给定一个数组,数组中只包含0和1。请找到一个最长的子序列,其中0和1的数量是相同的
- 最长单调递增子序列
- 最长单调递增子序列的三种解法