最高的广告牌
作者:互联网
你正在安装一个广告牌,并希望它高度最大。这块广告牌将有两个钢制支架,两边各一个。每个钢支架的高度必须相等。
你有一堆可以焊接在一起的钢筋 rods。举个例子,如果钢筋的长度为 1、2 和 3,则可以将它们焊接在一起形成长度为 6 的支架。
返回广告牌的最大可能安装高度。如果没法安装广告牌,请返回 0。
import java.util.HashMap;
import java.util.Map;
class Solution {
public static int tallestBillboard(int[] rods) {
if (rods == null || rods.length == 0) {
return 0;
}
/**
* 存放差值 -> 更大的一方
*/
Map<Integer, Integer> map = new HashMap<>();
map.put(0, 0);
for (int rod : rods) {
Map<Integer, Integer> copy = new HashMap<>(map);
for (Map.Entry<Integer, Integer> entry : copy.entrySet()) {
Integer key = entry.getKey();
Integer value = entry.getValue();
/**
* 1. 放到小的一边
*/
if (rod <= key) {
map.put(key - rod, Math.max(map.getOrDefault(key - rod, 0), value));
} else {
map.put(rod - key, Math.max(map.getOrDefault(rod - key, 0), value - key + rod));
}
/**
* 2. 放到大的一边
*/
map.put(key + rod, Math.max(map.getOrDefault(key + rod, 0), value + rod));
}
}
return map.get(0);
}
}
标签:Map,HashMap,map,int,广告牌,最高,rods 来源: https://www.cnblogs.com/tianyiya/p/15406887.html