最强解析面试题:堆箱子
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
附录
自负和自大真的是搞笑!
以上是关于最强解析面试题:堆箱子的主要内容,如果未能解决你的问题,请参考以下文章