本文共 1101 字,大约阅读时间需要 3 分钟。
给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(n2) 。进阶: 你能将算法的时间复杂度降低到 O(n log n) 吗?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-increasing-subsequence著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
1、用数组dp[i]表示以nums[i]结尾的最长上升子序列的长度
2、计算dp[i]的时候需要遍历dp[0]到dp[i-1] 3、选出其中dp[i]最大的如dp[j]并且还要满足nums[i]>nums[j] 4、dp[i]=dp[j]+1 5、否则,dp[i]=1;
class Solution { public int lengthOfLIS(int[] nums) { if (nums.length==0) return 0; int[] dp = new int[nums.length]; int res=1; dp[0]=1; for(int i=1;i=0;j--){ if (nums[i]>nums[j]){ flag=Math.max(dp[j],flag); } } dp[i]=flag+1; res=Math.max(res,dp[i]); } return res; }}
class Solution { public int lengthOfLIS(int[] nums) { int len = nums.length; int[] flag=new int[len]; int res=0; for(int i=0;i