您的位置:首页 > 其它

[Codewars]-Pyramid Slide Down

2018-03-24 17:11 120 查看

[Codewars]-Pyramid Slide Down(2018/3/31更新)

题目:

从金字塔顶端到底部,寻找一条最长的路径。

思路:

动态规划就行了

这里我简单解释一下动态规划方法,从底部开始,把倒数第二层每个元素,分别加上下一层的相邻元素(可以选的下一步),,把最大的一个(最优的下一步)作为这层(倒数第二层)的新元素。

比如:

3
7 4
2 4 6
8 5 9 3


最底下的一层是
8 5 9 3
,倒数第二层是
2 4 6


2可以选择下一层的8或者5作为下一步,而2+8>2+5,故把2+8=10,取代2,

4可以选择下一层的5和9作为下一步,而4+9>4+5,故把4+9=13,取代4的位置

同理6+9>6+3,倒数第二层变成了
10 13 15
,去掉(无视)最后一层,把倒数第二层最为新的最后一层。

金字塔变成

3
7  4
10 13 15


然后,金字塔变成

3
20 19


到最后只剩下一层,就是23,这个就是最优解了

解答:

function longestSlideDown (pyramid) {
var res = pyramid.pop()
while (pyramid){
var cur = pyramid.pop()
if(!cur){break ;return ;}
var arr = []
cur.forEach(function(ele,index){
arr.push( cur[index]+Math.max( res[index],res[index+1] ) )
})
res = arr
}
return res.pop()
}


大神写法:

function longestSlideDown (pyramid) {
return pyramid.reduceRight((last,current)=>current.map(
(v,i)=>v+Math.max(last[i],last[i+1])
))[0];
}


大神总是那么让人折服。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: