动态标记flag

90 阅读1分钟

天际线问题

buildings = [6,3,5,2,2,3]

右边是大海,哪些楼能看到大海

      function getSkyLine(buildings) {
        
        const length = buildings.length;

        let flag = buildings[length - 1];
        const result = [buildings[length - 1]]

        // 从右往左遍历,倒着遍历, 动态改变flag , 第一个flag 是最右边的
        for (i = length; i >= 0; i--) {
          if (buildings[i] > flag) {
            flag = buildings[i];
            result.push(flag)
          }
        }
        return result.reverse()
      }

      console.log(getSkyLine([6,3,5,2,2,3]))

最后一个肯定能看到大海,最后一个定为flag, 后面遇到大数,再把大数变成flag,把flag全收集起来。 倒着遍历,for(i=length;i>=0;i--),随着遍历,改变flag,收集flag, 最后result.reverse()