动态规划进阶
动态规划进阶
也就是优化算法,对入门所列情景进行内存和数据结构上的优化,站在这个巨人的肩膀上
一维数组结构优化
备忘录+非递归
用数组进行存储,可以避免动态规划进行递归导致的重复计算,拿个入门题进行演示
BM64 最小花费爬楼梯
直接上代码,类似于斐波那契数列也是如此
function minCostClimbingStairs(cost) {
if (cost.length < 2) return 0;
let list = [0,0];
for (let i = 2; i <= cost.length; i++) {
list[i] = Math.min(list[i - 1] + cost[i - 1], list[i - 2] + cost[i - 2]);
}
return list[cost.length];
}
module.exports = {
minCostClimbingStairs: minCostClimbingStairs,
};
备忘录基础上,再用双指针进行优化
这个如果没有使用备忘录写一遍,比较难想出来
BM64 最小花费爬楼梯
function jumpFloor3(number) {
if (number < 1) { list[0] = 0; return 0; }
if (number == 1) { list[1] = 1; return 1; }
if (number == 2) { list[2] = 2; return 2; }
let pre = 1
let mid = 2
let next = 3
for (let i = 3; i <= number; i++) {
next = mid + pre
pre =mid
mid = next
}
return next
}
console.log(jumpFloor3(100))
二维数组结构优化
这个先放着