JavaInterview JavaInterview
首页
指南
分类
标签
归档
  • CSDN (opens new window)
  • 文档集合 (opens new window)
  • 系统架构 (opens new window)
  • 微信号 (opens new window)
  • 公众号 (opens new window)

『Java面试+Java学习』
首页
指南
分类
标签
归档
  • CSDN (opens new window)
  • 文档集合 (opens new window)
  • 系统架构 (opens new window)
  • 微信号 (opens new window)
  • 公众号 (opens new window)
  • 指南
  • 简历

  • Java

  • 面试

  • 算法

  • algorithm
  • leetcode
JavaInterview.cn
2022-12-26
目录

最高的广告牌Java

文章发布较早,内容可能过时,阅读注意甄别。

# 题目

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

你有一堆可以焊接在一起的钢筋 rods。举个例子,如果钢筋的长度为 1、2 和 3,则可以将它们焊接在一起形成长度为 6 的支架。

返回 广告牌的最大可能安装高度 。如果没法安装广告牌,请返回 0 。

示例 1:

输入:[1,2,3,6]
输出:6
解释:我们有两个不相交的子集 {1,2,3} 和 {6},它们具有相同的和 sum = 6。

示例 2:

输入:[1,2,3,4,5,6]
输出:10
解释:我们有两个不相交的子集 {2,3,5} 和 {4,6},它们具有相同的和 sum = 10。

示例 3:

输入:[1,2]
输出:0
解释:没法安装广告牌,所以返回 0。

提示:

  • 0 <= rods.length <= 20
  • 1 <= rods[i] <= 1000
  • sum(rods[i]) <= 5000

# 思路

    //key(左右高度差(左侧-右侧)) ; value (左侧高度)
    Map<Integer, Integer> res = new HashMap<>();
    Map<Integer, Integer> copy = new HashMap<>();

# 解法


class Solution {
    
    public int tallestBillboard(int[] rods) {
        //key(左右高度差(左侧-右侧)) ; value (左侧高度)
        Map<Integer, Integer> res = new HashMap<>();
        Map<Integer, Integer> copy = new HashMap<>();
        res.put(0, 0);
        for (int h : rods) {
            copy.clear();
            copy.putAll(res);//获取当前支架之前的所有支架,构成的所有高度差
            for (Integer key : copy.keySet()) {//对之前每种情况进行当前支架的选择更新
                //将当前支架放在左侧
                //(判断当前高度差是否存在,若存在,更新左侧高(取较大值),若不存在,添加新的键值对)
                res.put(key + h, Math.max(res.getOrDefault(key + h, 0), copy.get(key) + h));
                //将当前支架放在右侧
                //(判断当前高度差是否存在,若存在,更新左侧高(取较大值),若不存在,添加新的键值对)
                res.put(key - h, Math.max(res.getOrDefault(key - h, 0), copy.get(key)));
                //放弃当前支架,则res保持不变
            }
        }
        //返回最后高度差为0的左侧高度
        return res.get(0);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

# 总结

  • 分析出几种情况,然后分别对各个情况实现
微信 支付宝
最近更新
01
1633. 各赛事的用户注册率 Java
07-02
02
1636. 按照频率将数组升序排序 Java
07-02
03
1639. 通过给定词典构造目标字符串的方案数 Java
07-02
更多文章>
Theme by Vdoing | Copyright © 2019-2025 JavaInterview.cn
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式