其他分享
首页 > 其他分享> > 最高的广告牌

最高的广告牌

作者:互联网

链接

你正在安装一个广告牌,并希望它高度最大。这块广告牌将有两个钢制支架,两边各一个。每个钢支架的高度必须相等。

你有一堆可以焊接在一起的钢筋 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