leet-code/src/main/java/leetcode/editor/cn/LongestIncreasingSubsequence.java

79 lines
1.8 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//给你一个整数数组 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)) 吗?
//
// Related Topics 数组 二分查找 动态规划
// 👍 1781 👎 0
package leetcode.editor.cn;
//300:最长递增子序列
class LongestIncreasingSubsequence {
public static void main(String[] args) {
//测试代码
Solution solution = new LongestIncreasingSubsequence().new Solution();
}
//力扣代码
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public int lengthOfLIS(int[] nums) {
int[] dp = new int[nums.length];
dp[0] = 1;
int max = 1;
for (int i = 1; i < nums.length; i++) {
dp[i] = 1;
for (int j = 0; j < nums.length; j++) {
if (nums[i] > nums[j]) {
dp[i] = Math.max(dp[i], dp[j] + 1);
}
}
max = Math.max(max, dp[i]);
}
return max;
}
}
//leetcode submit region end(Prohibit modification and deletion)
}