一、最少硬币
function coinsChange(coins, amount) {
const dp = new Array(amount + 1).fill(amount + 1);
dp[0] = 0;
for (let i = 1; i < amount + 1; i++) {
for (let j = 0; j < coins.length; j++) {
if (i >= coins[j]) {
dp[i] = Math.min(dp[i], dp[i - coins[j]] + 1);
}
}
}
return dp[amount] > amount ? -1 : dp[amount];
}
二、路径
const uniquePaths = (m, n) => {
const dp = new Array(m).fill(0).map(item => new Array(n).fill(0));
for (let i = 0; i < m; i++) {
dp[i][0] = 1;
}
for (let j = 0; i < n; j++) {
dp[0][j] = 1;
}
for (let k = 1; k < m; k++) {
for (let q = 1; q < n; q++) {
dp[k][q] = dp[k - 1][q] + dp[k][q-1];
}
}
return dp[m-1][n-1];
}
三、获取给定数组连续元素累加最大值
const maxSubArray = (array) => {
let base = array[0];
let max = array[0];
const len = array.length;
for (let i = 1; i < len; i++) {
base = Math.max(base + array[i], array[i]);
max = Math.max(base, max);
}
return max;
};