LeetCode 300 最长上升子序列
LeetCode 300 最长上升子序列
问题描述:
给定一个无序的整数数组,找到其中最长上升子序列的长度。
动态规划
执行用时:16 ms, 在所有 Java 提交中击败了24.49%的用户
内存消耗:36.5 MB, 在所有 Java 提交中击败了95.21%的用户
class Solution {
public int lengthOfLIS(int[] nums) {
//动态规划解法
//1. dp[i]表示nums[0:i]中以nums[i]结尾的最长递增子序列长度
//2. dp[i]需要将nums[i]与之前的所有nums[j] (j<i)比较
//3. 若nums[j]<nums[i],则dp[i] = Math.max(dp[i], dp[j]+1)
//4. 每个位置处以该元素为最小子序列的长度为1
if(nums==null || nums.length==0) {
return 0;
}
int[] dp = new int[nums.length];
Arrays.fill(dp, 1);
int ans = dp[0];
for(int i=1; i<nums.length; i++) {
for(int j=0; j<i; j++) {
if(nums[i]>nums[j]) {
dp[i] = Math.max(dp[i], dp[j]+1);
}
}
ans = Math.max(ans, dp[i]);
}
return ans;
}
}