美文网首页
Pyramid Slide Down

Pyramid Slide Down

作者: xinyiyake | 来源:发表于2020-03-20 15:19 被阅读0次

    题目
    假设你有一个金字塔结构的数据,从金字塔顶端到底部,寻找一条最长的路径。比如:

       /3/
      \7\ 4 
     2 \4\ 6 
    8 5 \9\ 3
    

    你能得到的最长路径是:3 + 7 + 4 + 9 = 23
    问题来了,请写出一个方法longestSlideDown,你能找到最长的路劲,例:longestSlideDown([[3], [7, 4], [2, 4, 6], [8, 5, 9, 3]]) => 23

    思路

    1. 从底部开始,把倒数第二层每个元素,分别加上下一层的相邻元素(可以选的下一步),把最大的一个(最优的下一步)作为这层(倒数第二层)的新元素。
    2. 以题目中的示例数组为例:
       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,15取代了6
    • 倒数第二层就变成了10 13 15,去掉最后一层,把倒数第二层最为新的最后一层,得到新的数据:
          3
        7   4 
      10  13  15 
    
    • 同理,数据变成:
          3
       20  19
    

    -最后得到最大路径23

    实现

    function longestSlideDown (pyramid) {
      var len = pyramid.length
      if(len==1){
        return pyramid[0][0]
      }else{
        pyramid[len-2] = pyramid[len-2].map((v,i)=>{
          return Math.max(v+pyramid[len-1][i],v+pyramid[len-1][i+1])
        })
        pyramid.pop()
        return longestSlideDown(pyramid)
      }
    }
    

    更好的实现方法

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

    相关文章

      网友评论

          本文标题:Pyramid Slide Down

          本文链接:https://www.haomeiwen.com/subject/mxujyhtx.html