300. 最長遞增子序列
給你一個整數陣列 nums ,找到其中最長嚴格遞增子序列的長度。
子序列是由陣列派生而來的序列,刪除(或不刪除)陣列中的元素而不改變其餘元素的順序。例如,[3,6,2,7] 是陣列 [0,3,1,6,2,2,7] 的子序列。
示例 1:
輸入:nums = [10,9,2,5,3,7,101,18]
輸出:4
解釋:最長遞增子序列是 [2,3,7,101],因此長度為 4 。
示例 2:
輸入:nums = [0,1,0,3,2,3]
輸出:4
示例 3:
輸入:nums = [7,7,7,7,7,7,7]
輸出:1
提示:
1 <= nums.length <= 2500
-104 <= nums[i] <= 104
進階:
你可以設計時間複雜度為 O(n2) 的解決方案嗎?
你能將演算法的時間複雜度降低到 O(n log(n)) 嗎?
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/longest-increasing-subsequence
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
官方解(動態規劃,時間複雜度為O(n*n))
class Solution {
public int lengthOfLIS(int[] nums) {
if (nums.length == 0) {
return 0;
}
int[] dp = new int[nums.length];
dp[0] = 1;
int maxans = 1;
for (int i = 1; i < nums.length; i++) {
dp[i] = 1;
for (int j = 0; j < i; j++) {
if (nums[i] > nums[j]) {
dp[i] = Math.max(dp[i], dp[j] + 1);
}
}
maxans = Math.max(maxans, dp[i]);
}
return maxans;
}
}
作者:LeetCode-Solution
連結:https://leetcode-cn.com/problems/longest-increasing-subsequence/solution/zui-chang-shang-sheng-zi-xu-lie-by-leetcode-soluti/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。
官方解(貪心+二分查詢,時間複雜度為O(nlogn))
class Solution {
public int lengthOfLIS(int[] nums) {
int len = 1, n = nums.length;
if (n == 0) {
return 0;
}
int[] d = new int[n + 1];
d[len] = nums[0];
for (int i = 1; i < n; ++i) {
if (nums[i] > d[len]) {
d[++len] = nums[i]; //如果大於,就往後加
} else { //如果小於,就替換,最後得到的長度就是最大長度
int l = 1, r = len, pos = 0; // 如果找不到說明所有的數都比 nums[i] 大,此時要更新 d[1],所以這裡將 pos 設為 0
while (l <= r) {
int mid = (l + r) >> 1;
if (d[mid] < nums[i]) {
pos = mid;
l = mid + 1;
} else {
r = mid - 1;
}
}
d[pos + 1] = nums[i];
}
}
return len;
}
}
作者:LeetCode-Solution
連結:https://leetcode-cn.com/problems/longest-increasing-subsequence/solution/zui-chang-shang-sheng-zi-xu-lie-by-leetcode-soluti/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。
相關文章
- leetcode力扣 300. 最長遞增子序列LeetCode力扣
- 最長遞增子序列
- Day 45 | 300.最長遞增子序列 、674. 最長連續遞增序列 、718. 最長重複子陣列陣列
- LeetCode300.最長遞增子序列LeetCode
- Leetcode-300. 最長遞增子序列LeetCode
- 最長遞增子序列-Java 實現Java
- 673. 最長遞增子序列的個數
- 【修訂版】Leetcode 300 最長遞增子序列LeetCode
- Leetcode 300 最長遞增子序列(LIS板題)LeetCode
- 程式碼隨想錄演算法訓練營 | 300.最長遞增子序列,674. 最長連續遞增序列,718. 最長重複子陣列演算法陣列
- 300-Longest Increasing Subsequnce-最長遞增子序列
- 程式碼隨想錄演算法訓練營第49天 | 300.最長遞增子序列 、674. 最長連續遞增序列 、718. 最長重複子陣列演算法陣列
- 習題3.4 最長連續遞增子序列 (20分)
- 【LeetCode動態規劃#14】子序列系列題(最長遞增子序列、最長連續遞增序列、最長重複子陣列、最長公共子序列)LeetCode動態規劃陣列
- [leetcode 中等 動態規劃]673. 最長遞增子序列的個數 [leetcode 簡單 滑動視窗] 674. 最長連續遞增序列 [筆試]陣列的遞增子陣列序列LeetCode動態規劃筆試陣列
- 第二章 :查詢與排序-------2.19題目詳解_找出最長連續遞增子序列排序
- LeetCode 300. 最長上升子序列(Python、動態規劃、貪心演算法)LeetCodePython動態規劃演算法
- Leetcode 最小調整數+滑動視窗遞增子序列LeetCode
- 線性dp:LeetCode674. 最長連續遞增序列LeetCode
- OpenJ_Bailian - 2945 攔截導彈(最長遞減子序列)AI
- Day 28 | 491.遞增子序列 、46.全排列、 47.全排列 II
- 最長公共子序列
- 最長上升子序列
- 最長相等子序列
- Leedcode-最長特殊序列 Ⅰ
- 最長公共子序列(JAVA)Java
- 線性dp:最長上升子序列
- 線性dp:最長公共子序列
- 最長公共子序列求方案數
- 594. 最長和諧子序列
- LeetCode-128-最長連續序列LeetCode
- java 實現 最長公共子序列Java
- 死嗑 最長上升子序列(LIS)
- 最長公共子序列 Longest Common Subsequence
- LeetCode 1143.最長公共子序列LeetCode
- 【LeetCode回溯演算法#08】遞增子序列,鞏固回溯演算法中的去重問題LeetCode演算法
- NlogN 求最長不下降子序列(LIS)
- 動態規劃:最長上升子序列動態規劃