问题(力扣原题第300题):
给定一个无序的整数数组,找到其中最长上升子序列的长度。
示例:
输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。
思路:
动态规划 用一个数组dp[]保存给定数组中每一个元素本身对应的最大上升子序列长度,最后返回dp[]数组中的最大值.
代码:
public static int lengthOfLIS(int[] nums
) {
if (nums
.length
== 0) {
return 0;
}
int length
= nums
.length
;
int maxAns
= 1;
int[] dp
= new int[length
];
dp
[0] = 1;
for (int i
= 1; i
< length
; i
++) {
int maxLen
= 0;
for (int j
= 0; j
< i
; j
++) {
if (nums
[i
] > nums
[j
]) {
maxLen
= Math
.max(maxLen
, dp
[j
]);
}
}
dp
[i
] = maxLen
+ 1;
maxAns
= Math
.max(dp
[i
], maxAns
);
}
System
.out
.println(Arrays
.toString(dp
));
return maxAns
;
}
时间复杂度:
二层循环,第一层 i < length ;第二层 j < i ,去掉系数,时间复杂度为O(n2)
如果有不对的地方,请各位老铁批评指正。