956. 最高的广告牌

简介: 比如说在你来到最后数字之前map里面有一个插值是1百万的基线10亿,这说明有一一个集合它{10亿+ 100万},还有集合叫{10亿}。这时候你的一百万进去,正好怼出一个差值为零的来。所以为什么map要记录所有的差值,你不知道后面哪一个奇葩数能拱出大的来,我不知道后面有什么奇葩的数,能让我一个重新插值为季的集合基线变得巨大,不知道,所以我都留着。

文章目录

前言

解题思路

代码

前言

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


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

   }

}


目录
相关文章
|
SQL 前端开发 关系型数据库
LLM大模型实战 —— DB-GPT阿里云部署指南
DB-GPT 是一个实验性的开源应用,它基于FastChat,并使用vicuna-13b作为基础模型, 模型与数据全部本地化部署, 绝对保障数据的隐私安全。 同时此GPT项目可以直接本地部署连接到私有数据库, 进行私有数据处理, 目前已支持SQL生成、SQL诊断、数据库知识问答、数据处理等一系列的工作。
8820 2
|
架构师 Java 程序员
同事开源我的微服务深度实践笔记到GitHub,短短3天竟吸粉10W+
说Spring成就了Java,Spring是Java程序员必修课之一,应该没人反对吧? 前几年面试最常问的且可以顺利拿到高薪的技能是Spring,随着Spring体系的壮大,除非你在简历上添加Spring Boot和Spring Cloud的技能,才可以打动面试官,而现在,除非是Spring架构的扎实经验,否则难以让面试官高看。 一名合格的Java后端工程师或架构师,至少微服务架构是必须牢牢掌握的,这里也整理了整套微服务架构学习路线,准备作为福利送给大家,可以先看一下重点简图。
|
12月前
|
弹性计算 运维
5分钟构建了个阿里云OOS运维模板顾问GPTs
本文介绍了通过gpts构建阿里云OOS运维模板顾问的背景及效果
|
人工智能 监控 数据可视化
一套智慧工地云平台源码,基于Spring Cloud +UniApp框架开发,包含:视频监控、劳务实名制、环境监测、GIS地理信息、数据统计等功能
一套智慧工地平台源码,一体化云服务,包含:视频监控、劳务实名制、环境监测、停车管理、安质管理、GIS地理信息、数据统计、智能AI等功能。 技术架构:微服务+Java+Spring Cloud +UniApp +MySql 端到端的数据安全通信和安全认证,保障项目看板信息、劳务管理、视频管理、设备告警等数据的安全传输。
354 0
一套智慧工地云平台源码,基于Spring Cloud +UniApp框架开发,包含:视频监控、劳务实名制、环境监测、GIS地理信息、数据统计等功能
|
设计模式 缓存 安全
Java代理模式:如何优雅地控制对象访问?
Java代理模式:如何优雅地控制对象访问?
236 1
使用shiro路径通配符配置访问权限
使用shiro路径通配符配置访问权限
176 0
|
安全 Unix Linux
关于嵌入式Linux系统flash分区设计及文件系统格式选择的一些浅见
嵌入式系统应用程序升级是比较频繁的,对于flash的合理划分与文件系统选型就显得尤为关键。
362 0
|
缓存 运维 网络协议
企业运维经典面试题汇总(1)
企业运维经典面试题汇总(1)
503 0
企业运维经典面试题汇总(1)
|
JSON 缓存 NoSQL
总结SpringBoot1.x迁移到2.x需要注意的问题
SpringBoot1.x和SpringBoot2.x版本差异化还是比较大的,有些三方依赖组件有些是基于2.0版本为标准升级的,当我们将项目由1.0升级到2.0时会出现依赖的方法不存在或方法错误,需要逐个去调整,下面总结了我们升级实践过程中遇到的一些问题和网友总结的一些问题。
182 0
|
存储 安全 算法
安全子系统 | 学习笔记
快速学习安全子系统
安全子系统 | 学习笔记