Pyramid Slide Down

2020-03-20  本文已影响0人  xinyiyake

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

   /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
      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];
}
上一篇下一篇

猜你喜欢

热点阅读