題目:
題解:動態規劃
着重參考:動態規劃設計方法&&紙牌遊戲講解二分解法
代碼:動態規劃
/**
* code300
*/
public class code300 {
public static int lengthOfLIS(int[] nums) {
if (nums.length == 0) {
return 0;
}
int dp[] = new int[nums.length];
for (int i = 0; i < dp.length; i++) {
dp[i] = 1;
}
for (int i = 0; i < nums.length; i++) {
for (int j = 0; j < i; j++) {
if (nums[j] < nums[i]) {
if (dp[j] + 1 > dp[i]) {
dp[i] = dp[j] + 1;
}
}
}
}
int max = 0;
for (int i = 0; i < dp.length; i++) {
if (dp[i] > max) {
max = dp[i];
}
}
return max;
}
public static void main(String[] args) {
int nums[] = { 10, 9, 2, 5, 3, 7, 101, 18 };
int res = lengthOfLIS(nums);
System.out.println("最長上升子序列的長度爲:" + res);
}
}