最長遞增子序列-Java 實現
1、Θ(n2) 打表實現
初始化對角線為 1;
對每一個 i,遍歷 j(0 到 i-1):
若A[i] <= A[j],置 1。
若A[i] > A[j],取第 j 行的最大值加 1。
private static int getLargestLen(int[] array) {
int[] max = new int[array.length];
for (int i = 0; i <array.length ; i++) {
max[i] = 1;
}
for (int i = 1; i < array.length ; i++) {
for (int j = 0; j < i ; j++) {
if (array[i] > array[j] && max[i] < max[j] + 1) {
max[i] = max[j] + 1;
}
}
}
int maxLen = 0;
for (int i = 0; i < array.length ; i++) {
if (maxLen < max[i]) {
maxLen = max[i];
}
}
return maxLen;
}
2、Θ(nlgn)的方案
建立一個輔助陣列array,依次讀取陣列元素 x 與陣列末尾元素 top比較:
如果 x > top,將 x 放到陣列末尾;
如果 x < top,則二分查詢陣列中第一個 大於等於x 的數,並用 x 替換它。
private static int getLength(int[] array) {
int[] assistArray = new int[array.length];
assistArray[0] = array[0];
int length = 0;
for (int number : array) {
if (assistArray[length] < number) {
assistArray[++length] = number;
} else {
int low = 0;
int high = length;
while (low < high) {
int middle = (low + high) >> 1;
if (assistArray[middle] < number) {
low = middle + 1;
} else {
high = middle - 1;
}
}
if (assistArray[low] < number && (low + 1) < assistArray.length) {
assistArray[low + 1] = number;
} else {
assistArray[low] = number;
}
}
}
for (int tmp : assistArray) {
System.out.println(tmp);
}
return length + 1;
}
相關文章
- 673. 最長遞增子序列的個數
- Leetcode-300. 最長遞增子序列LeetCode
- [LintCode] Longest Increasing Subsequence 最長遞增子序列
- Leetcode 300 最長遞增子序列(LIS板題)LeetCode
- 【修訂版】Leetcode 300 最長遞增子序列LeetCode
- 300-Longest Increasing Subsequnce-最長遞增子序列
- leetcode力扣 300. 最長遞增子序列LeetCode力扣
- 【LeetCode動態規劃#14】子序列系列題(最長遞增子序列、最長連續遞增序列、最長重複子陣列、最長公共子序列)LeetCode動態規劃陣列
- java 實現 最長公共子序列Java
- [leetcode 中等 動態規劃]673. 最長遞增子序列的個數 [leetcode 簡單 滑動視窗] 674. 最長連續遞增序列 [筆試]陣列的遞增子陣列序列LeetCode動態規劃筆試陣列
- 第二章 :查詢與排序-------2.19題目詳解_找出最長連續遞增子序列排序
- 最長公共子序列(JAVA)Java
- 最長公共子序列的程式碼實現
- hdu1025 最大遞增子序列的優化優化
- 最長公共子序列,遞迴簡單程式碼遞迴
- Leetcode 最小調整數+滑動視窗遞增子序列LeetCode
- 最長上升子序列
- 詳解動態規劃最長公共子序列--JavaScript實現動態規劃JavaScript
- Day 28 | 491.遞增子序列 、46.全排列、 47.全排列 II
- OpenJ_Bailian - 2945 攔截導彈(最長遞減子序列)AI
- codeforces 340D Bubble Sort Graph(最長非遞減子序列)
- Leedcode-最長特殊序列 Ⅰ
- 最長公共子序列求方案數
- 【LeetCode(Java) - 298】二叉樹最長連續序列LeetCodeJava二叉樹
- 什麼是Java序列化,如何實現java序列化Java
- 動態規劃:最長上升子序列動態規劃
- 最長上升子序列動態規劃動態規劃
- 動態規劃求最長降序序列動態規劃
- 動態規劃-最長公共子序列動態規劃
- 動態規劃——最長公共子序列動態規劃
- 最長等差數列;及子序列分析
- 演算法題:最長公共子序列演算法
- 什麼是Java序列化?如何實現序列化?Java
- Java中使用FlatBuffers實現序列化Java
- Java中使用FlatBuffer實現序列化Java
- 動態規劃-最長上升子序列模型動態規劃模型
- 動態規劃(最長公共子序列LCS)動態規劃
- LCS 演算法:Javascript 最長公共子序列演算法JavaScript