全部版块 我的主页
论坛 数据科学与人工智能 大数据分析 Oracle数据库及大数据解决方案
1064 2
2022-10-10
极客前端实战第0期对标阿里P6
给你一个整数数组成本,其中cost是爬第I级楼梯需要支付的成本。一旦你付了这个费用,你可以选择爬上一两个台阶。

可以选择从下标0或下标1的台阶上楼梯。

请计算并返回到达楼梯顶部的最低成本。

示例1:
输入:成本= [10,15,20]
产量:15
说明:您将从下标为1的步骤开始。
付15英镑,爬两级台阶到楼梯顶。
总费用是15英镑。

对书名或背景的注释
像爬楼梯一样爬楼梯。我们必须进行第三步。那么,我们如何进行第三步呢?有两种选择:从第二步开始走1步,或者从第一步开始走2步。
那么问题的关键就在于,在两个选择中:有几种方法可以到达第二步,也有几种方法可以到达第一步。找到两个选择的和就是到达第三步的方法的数量:

//递归公式

DP[I]= DP[I-1]+DP[I-2];

爬楼梯的最小成本继续假设我们跨过第2级台阶。什么是跨越2步,就是上2步,交了2步的继续上楼费(加上成本[2])就是跨越2步。
//初始条件

DP[0]= cost[0];也就是跨越阶梯的最小成本0。

dp[1] =成本[1];也就是跨越第一步的最小成本。

因此,dp阵列的每个位置记录了穿过当前位置的最低成本。

然后,让我们回到假设。如何才能在跨过第2个阶梯之前,也就是在加上成本之前,得到所需的费用[2]?换句话说,我如何进行第二步?如果我知道如何到达第二步,那么它将花费我最少的代价,这是我到达第二步之前的最小代价,即Math.min(dp[i-1],dp[i-2]),加上cost[2]就是穿越第二步的最小值。

所以,用动态编程来解决问题:

var minCostClimbingStairs = function(cost){

设len = cost.length
设arr =[];
arr[0]= cost[0];
arr[1]= cost[1];

for(设I = 2;i < leni++) {
arr = Math.min(arr[i-1],arr[i-2]) + cost
}

return Math.min(arr[len-1],arr[len-2]);
};
极客前端实战第0期对标阿里P6
download链接:https://pan.baidu.com/s/1X84NeAwyHS3Rwry2Aj4rkQ?pwd=7f1o
提取码:7f1o
--来自百度网盘超级会员V5的分享

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2023-2-17 09:50:08
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2023-10-27 11:31:36
关注一下
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

分享

扫码加好友,拉您进群