最强解析面试题:堆箱子

Posted 魏小言

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最强解析面试题:堆箱子相关的知识,希望对你有一定的参考价值。


最强解析面试题:堆箱子

文章讲解 “ 堆箱子 ” 经典面试题,包含思路及源码,及解惑!

题目

有一堆箱子,每个箱子宽为wi,长为di,高为hi,现在需要将箱子都堆起来,而且为了使堆起来的箱子不倒,上面的箱子的宽度和长度必须小于下面的箱子。请实现一个方法,求出能堆出的最高的高度,这里的高度即堆起来的所有箱子的高度之和。

示例

输入:
[1,1,1],[1,1,1],[1,1,1]

输出:1

思路

  • 动态规划:任意排序一宽或长,计算其最大值

代码

package main

import (
"fmt"
)
//堆箱子
func main() 
   fmt.Println("res:", Res())

func Res() int 
   //[[1, 1, 1], [2, 2, 2], [3, 3, 3]] - 6
   var x = []int1, 2, 3
   var y = []int1, 2, 3
   var z = []int1, 2, 3
   for i := 0; i < len(x); i++ 
      for j := i + 1; j < len(x); j++ 
         if x[i] < x[j] 
            x[i], x[j] = x[j], x[i]
            y[i], y[j] = y[j], y[i]
            z[i], z[j] = z[j], z[i]
         
      
   
   var res int
   var m [2000]int
   for i := 0; i < len(x); i++ 
      m[i] = z[i]
      t := 0
      for j := 0; j < i; j++ 
         if x[j] > x[i] && y[j] > y[i] 
            t = Max(m[j], t)
         
         m[i] += t
      
      res = Max(res, m[i])
   
   return res


func Max(a, b int) int 
   if a > b 
      return a
   
   return b

附录

自负和自大真的是搞笑!

以上是关于最强解析面试题:堆箱子的主要内容,如果未能解决你的问题,请参考以下文章

最强解析面试题:接雨水...

最强解析面试题:Goland 消费生产模式实现

最强解析面试题:替换空格「建议收藏!」

最强解析面试题:替换空格「建议收藏!」

最强解析面试题:硬币计算 动态规划

最强解析面试题:Goland 循环队列实现