956. 最高的广告牌

简介: 956. 最高的广告牌
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

前言

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

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

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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/tallest-billboard
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路

定义一个map
key:随意选两个子集产生的差值
在数组没有遍历之前,能够找到两个集合, 空集对空集,差值为0
value:有可能会有多个集合对产生同样的差值,记录产生当前差值那一对较好那一对集合较小的那个
在这里插入图片描述

谁的值大,谁是较好的一对
关心谁?基线最高的那个

在这里插入图片描述
3出现了,加工出map:在只考虑3的情况下,会有哪些差值产生

在这里插入图片描述

我老map是所有可能的集合所有可能的插值中最好的一对。
我新map是考虑了当前数字,对每一个老的集合接近左进右出来的新纪录。
我最终的新map怎么合并?老map和新map中的记录,综台起来,最好的变成新map,继续往下推。
当你推过了所有的数字,最终的map你看差值为0的最好一对就是你要的

为什么map中把所有差值都要记录?
那是因为你后面不知道会遇到什么数字。
举个例子,你最后一个数是一百万, 特别大,极大,它左边的数都没它大,但它是一百万。在来到1百万之前,我这个map千变万化,map中有可能有一 个差值是1百万,基线相当的高。
你遇到最后一个数字的时候,它1百万的差值代表什么?
比如说在你来到最后数字之前map里面有一个插值是1百万的基线10亿,
这说明有一一个集合它{10亿+ 100万},还有集合叫{10亿}。这时候你的一百万进去,
正好怼出一个差值为零的来。
所以为什么map要记录所有的差值,你不知道后面哪一个奇葩数能拱出大的来,
我不知道后面有什么奇葩的数,能让我一个重新插值为季的集合基线变得巨大,
不知道,所以我都留着。

代码

class Solution {
    public int tallestBillboard(int[] rods) {
        HashMap<Integer,Integer> dp=new HashMap<>(),cur;
        dp.put(0,0);
        for(int num:rods){
            if(num!=0){
                cur=new HashMap<>(dp);
                for(int d:cur.keySet()){
                    int diffMore=cur.get(d);
                    dp.put(d + num, Math.max(diffMore, dp.getOrDefault(num + d, 0)));
                    int diffXD=dp.getOrDefault(Math.abs(num-d),0);
                    if(d>=num){
                        dp.put(d-num,Math.max(diffMore+num,diffXD));
                    }else{
                        dp.put(num-d,Math.max(diffMore+d,diffXD));
                    }
                }
            }
        }
        return dp.get(0);
    }
}
相关文章
|
前端开发 JavaScript 算法
三分钟深入了解threejs的常见面试知识点
三分钟深入了解threejs的常见面试知识点
952 0
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
AI在创造还是毁掉音乐?——探索人工智能对音乐创作的影响
在当今数字化时代,人工智能(AI)技术的快速发展不仅改变了我们的生活方式和工作方式,也在音乐创作领域引发了广泛的讨论和热议。最近,随着各类音乐生成AI模型的涌现,人们开始探讨AI在音乐创作中的作用,以及它对传统音乐产业的潜在影响。
60 5
|
4月前
|
域名解析 网络协议 应用服务中间件
nginx-ingress通过ipv6暴露服务,并在nginx ingress日志中记录客户端真实ipv6的ip地址
本文主要通过阿里云提供的clb和nlb来实现,建议是提前创建好双栈的vpc和vsw(使用clb可以不用双栈vpc和vsw)
489 1
|
Oracle 关系型数据库 网络安全
连接Oracle数据库失败(ORA-12514)故障排除
ORA-12514的故障是很多新手在连接Oracle数据库时经常遇到故障,它通常表示无法连接到数据库实例,这里姚远老师告诉大家如何排除这类故障。
8159 0
|
机器学习/深度学习 运维 搜索推荐
机器学习中准确率、精确率、召回率、误报率、漏报率、F1-Score、AP&mAP、AUC、MAE、MAPE、MSE、RMSE、R-Squared等指标的定义和说明
在机器学习和深度学习用于异常检测(Anomaly detection)、电子商务(E-commerce)、信息检索(Information retrieval, IR)等领域任务(Task)中,有很多的指标来判断机器学习和深度学习效果的好坏。这些指标有相互权衡的,有相互背向的,所以往往需要根据实际的任务和场景来选择衡量指标。本篇博文对这些指标进行一个梳理。
机器学习中准确率、精确率、召回率、误报率、漏报率、F1-Score、AP&mAP、AUC、MAE、MAPE、MSE、RMSE、R-Squared等指标的定义和说明
|
数据采集 人工智能 算法
Python学习十大公开免费数据集介绍
很多行友说,想做项目学习和练手没有数据怎么办。又想给行哥投稿赚钱,没有数据拿头分析啊。先别急,这里行哥给大家推荐一些数据来源,足够你去好好分析数据,这些数据用来学习和找工作都不是问题
1027 0
Python学习十大公开免费数据集介绍
阿里云账号忘记了怎么办?账号用户名找回方法
阿里云账号忘记登录名是常有的事,如何找回用户名?云吞铺子发现了阿里云的一个账号神奇,真的太方便了,云吞铺子分享账号用户名找回神器,就这么简单: 阿里云忘记登录名的解决方法 阿里云登录名/账号/用户名/会员名忘记了怎么办?云吞铺子告诉你可以通过手机号、域名、备案信息、云服务器IP等找回你的账号: 如上图所示,您可以通过以上信息找回你的用户名。
4821 0
阿里云账号忘记了怎么办?账号用户名找回方法
|
弹性计算 负载均衡 网络协议
阿里云云计算ACP认证重点梳理2—负载均衡SLB
依据阿里云文档整理了负载均衡SLB相关内容,供阿里云云计算ACP认证考试参考,及作为文档的速查
3374 0
|
网络协议 Linux 调度
|
边缘计算 运维 监控
边缘节点服务ENS重磅升级 阿里云首次定义“边缘云计算”概念层层深入
在这一横一纵之间,阿里云在2018年率先提供了基于运营商边缘节点和网络的弹性分布式算力资源平台,也就是边缘节点服务ENS,连接最后10公里的ENS可以帮助用户将计算、转发等业务下沉至边缘,把终端到边缘节点的时延缩小到5毫秒,终端到云的访问频次将减少80%,计算、存储、网络等成本可以节省30%以上。
5974 0