leetcode300题
题目描述:给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。
子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。
例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。
public static int getMaxLength(int nums[]) {
int len = nums.length;
if (len < 2) return len;
int[] dp = new int[len];
Arrays.fill(dp, 1);
int ans = 1;
for (int i = 0; i < len; i++) {
for (int j = 0; j < i; j++) {
if (nums[j] < nums[i]) dp[i] = Math.max(dp[i], dp[j] + 1);
}
ans = Math.max(ans, dp[i]);
}
return ans;
}
leetcode322题
题目描述:给定不同面额的硬币 coins 和一个总金额 amount。
编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。
你可以认为每种硬币的数量是无限的。
public static int giveChange(int[] coins, int target) {
if (target <= 0) return -1;
int[] dp = new int[target + 1];
for (int i = 0; i < dp.length; i++) {
dp[i] = i;
}
for (int i = 1; i <= target; i++) {
for (int coin : coins) {
if (i - coin < 0) continue;
dp[i] = Math.min(dp[i], dp[i - coin] + 1);
}
}
return dp[target];
}
原文:https://www.cnblogs.com/wsd413/p/14749058.html