Pyramid Slide Down

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

   /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];
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容