From 187ecf20bd2a15b569578c7af693654183f6184a Mon Sep 17 00:00:00 2001 From: huangge1199 Date: Wed, 11 Aug 2021 12:03:42 +0800 Subject: [PATCH] =?UTF-8?q?300:=E6=9C=80=E9=95=BF=E9=80=92=E5=A2=9E?= =?UTF-8?q?=E5=AD=90=E5=BA=8F=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/LongestIncreasingSubsequence.java | 79 +++++++++++++++++++ .../editor/cn/LongestIncreasingSubsequence.md | 45 +++++++++++ 2 files changed, 124 insertions(+) create mode 100644 src/main/java/leetcode/editor/cn/LongestIncreasingSubsequence.java create mode 100644 src/main/java/leetcode/editor/cn/LongestIncreasingSubsequence.md diff --git a/src/main/java/leetcode/editor/cn/LongestIncreasingSubsequence.java b/src/main/java/leetcode/editor/cn/LongestIncreasingSubsequence.java new file mode 100644 index 0000000..ebb1870 --- /dev/null +++ b/src/main/java/leetcode/editor/cn/LongestIncreasingSubsequence.java @@ -0,0 +1,79 @@ +//给你一个整数数组 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) + +} \ No newline at end of file diff --git a/src/main/java/leetcode/editor/cn/LongestIncreasingSubsequence.md b/src/main/java/leetcode/editor/cn/LongestIncreasingSubsequence.md new file mode 100644 index 0000000..0d049b0 --- /dev/null +++ b/src/main/java/leetcode/editor/cn/LongestIncreasingSubsequence.md @@ -0,0 +1,45 @@ +

给你一个整数数组 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
+
+ +

 

+ +

提示:

+ + + +

 

+ +

进阶:

+ + +
Related Topics
  • 数组
  • 二分查找
  • 动态规划
  • \n
  • 👍 1781
  • 👎 0
  • \ No newline at end of file