最長遞增子序列-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;
}
相關文章
- 最長遞增子序列
- 300. 最長遞增子序列
- Leetcode-300. 最長遞增子序列LeetCode
- LeetCode300.最長遞增子序列LeetCode
- leetcode力扣 300. 最長遞增子序列LeetCode力扣
- 673. 最長遞增子序列的個數
- Leetcode 300 最長遞增子序列(LIS板題)LeetCode
- 【修訂版】Leetcode 300 最長遞增子序列LeetCode
- 300-Longest Increasing Subsequnce-最長遞增子序列
- 習題3.4 最長連續遞增子序列 (20分)
- 【LeetCode動態規劃#14】子序列系列題(最長遞增子序列、最長連續遞增序列、最長重複子陣列、最長公共子序列)LeetCode動態規劃陣列
- Day 45 | 300.最長遞增子序列 、674. 最長連續遞增序列 、718. 最長重複子陣列陣列
- [leetcode 中等 動態規劃]673. 最長遞增子序列的個數 [leetcode 簡單 滑動視窗] 674. 最長連續遞增序列 [筆試]陣列的遞增子陣列序列LeetCode動態規劃筆試陣列
- java 實現 最長公共子序列Java
- 程式碼隨想錄演算法訓練營 | 300.最長遞增子序列,674. 最長連續遞增序列,718. 最長重複子陣列演算法陣列
- 程式碼隨想錄演算法訓練營第49天 | 300.最長遞增子序列 、674. 最長連續遞增序列 、718. 最長重複子陣列演算法陣列
- 第二章 :查詢與排序-------2.19題目詳解_找出最長連續遞增子序列排序
- 最長公共子序列(JAVA)Java
- Leetcode 最小調整數+滑動視窗遞增子序列LeetCode
- 線性dp:LeetCode674. 最長連續遞增序列LeetCode
- OpenJ_Bailian - 2945 攔截導彈(最長遞減子序列)AI
- 詳解動態規劃最長公共子序列--JavaScript實現動態規劃JavaScript
- Day 28 | 491.遞增子序列 、46.全排列、 47.全排列 II
- 最長上升子序列
- 最長公共子序列
- 最長相等子序列
- 【LeetCode(Java) - 298】二叉樹最長連續序列LeetCodeJava二叉樹
- Leedcode-最長特殊序列 Ⅰ
- 什麼是Java序列化,如何實現java序列化Java
- 最長公共子序列求方案數
- 594. 最長和諧子序列
- 死嗑 最長上升子序列(LIS)
- 最長公共子序列 Longest Common Subsequence
- 線性dp:最長上升子序列
- 線性dp:最長公共子序列
- LeetCode-128-最長連續序列LeetCode
- LeetCode 1143.最長公共子序列LeetCode
- 【LeetCode回溯演算法#08】遞增子序列,鞏固回溯演算法中的去重問題LeetCode演算法