LeetCode算法心得——美丽塔 I(HashMap)

news2024/12/23 5:42:31

大家好,我是晴天学长,hashmap的灵活应用,然后边界的细节处理,需要的小伙伴可以关注支持一下哦!后续会继续更新的。
在这里插入图片描述


1) .美丽塔

在这里插入图片描述


美丽塔 I
给你一个长度为 n 下标从 0 开始的整数数组 maxHeights 。

你的任务是在坐标轴上建 n 座塔。第 i 座塔的下标为 i ,高度为 heights[i] 。

如果以下条件满足,我们称这些塔是 美丽 的:

1 <= heights[i] <= maxHeights[i]
heights 是一个 山状 数组。
如果存在下标 i 满足以下条件,那么我们称数组 heights 是一个 山状 数组:

对于所有 0 < j <= i ,都有 heights[j - 1] <= heights[j]
对于所有 i <= k < n - 1 ,都有 heights[k + 1] <= heights[k]
请你返回满足 美丽塔 要求的方案中,高度和的最大值 。

示例 1:

输入:maxHeights = [5,3,4,1,1]
输出:13
解释:和最大的美丽塔方案为 heights = [5,3,3,1,1] ,这是一个美丽塔方案,因为:
- 1 <= heights[i] <= maxHeights[i]

  • heights 是个山状数组,峰值在 i = 0 处。
    13 是所有美丽塔方案中的最大高度和。

示例 2:

输入:maxHeights = [6,5,3,9,2,7]
输出:22
解释: 和最大的美丽塔方案为 heights = [3,3,3,9,2,2] ,这是一个美丽塔方案,因为:

  • 1 <= heights[i] <= maxHeights[i]
  • heights 是个山状数组,峰值在 i = 3 处。
    22 是所有美丽塔方案中的最大高度和。
    示例 3:

输入:maxHeights = [3,2,5,5,2,3]
输出:18
解释:和最大的美丽塔方案为 heights = [2,2,5,5,2,2] ,这是一个美丽塔方案,因为:

  • 1 <= heights[i] <= maxHeights[i]
  • heights 是个山状数组,最大值在 i = 2 处。
    注意,在这个方案中,i = 3 也是一个峰值。
    18 是所有美丽塔方案中的最大高度和。

提示:

1 <= n == maxHeights <= 103
1 <= maxHeights[i] <= 109


2) .算法思路

美丽塔 I
1.map存数值
2.取数值往两边遍历。
不能超过最大高度并且小于旁边新修的
3.注意越界


3) .算法步骤

1.创建一个HashMap(map)用于存储每个高度值对应的索引列表。这样可以将相同高度值的索引集中在一起。

2.遍历整数列表(maxHeights),将每个元素的索引添加到对应高度值的索引列表中。

3.遍历HashMap的键集合,获取每个高度值对应的索引列表。

4.对于每个高度值的索引列表,进行以下操作:
a. 初始化sumtemp为0,用于记录当前高度和。
b. 选择一个索引作为修塔的中心点(maxindex),并将该索引处的高度设为初始修塔高度。
c. 从中心点向左遍历,每次取当前高度和左侧高度的较小值作为修塔高度,并更新sumtemp。
d. 从中心点向右遍历,每次取当前高度和右侧高度的较小值作为修塔高度,并更新sumtemp。
e. 将sumtemp与当前最大高度和sum进行比较,更新sum的值为较大者。

5.返回最大高度和sum。


4).代码示例

class Solution {
    public long maximumSumOfHeights(List<Integer> maxHeights) {
         int max = 0;
            int maxindex = -1;
            long sum = 0;
            // 找最大位置(存下标, 相同的)
            Map<Integer, List<Integer>> map = new HashMap<>();
            for (int i = 0; i < maxHeights.size(); i++) {
                int temp = maxHeights.get(i);
                    if (!map.containsKey(temp)){
                        map.put(temp, new ArrayList<>());
                    }
                    map.get(temp).add(i);
            }
            //遍历map
            for (int a: map.keySet()
                 ) {
                List<Integer> list = map.get(a);
                for (int j = 0; j < list.size(); j++) {
                    long sumtemp = 0;
                    maxindex = list.get(j);
                    //开始修塔
                    int[] nmus = new int[maxHeights.size()];
                    nmus[maxindex] = maxHeights.get(maxindex);
                    sumtemp+=maxHeights.get(maxindex);;
                    //左
                    int m = maxindex;
                    for (int i = maxindex; i >= 1; i--) {
                        if (i - 1 >= 0) {
                            int temp2 = Math.min(maxHeights.get(i-1), nmus[i]);
                            nmus[i-1] = temp2;
                            sumtemp += temp2;
                        }
                    }
                    //右
                    int n = maxindex;
                    for (int i = maxindex; i < maxHeights.size() - 1; i++) {
                        if (i + 1 < maxHeights.size()) {
                            int temp3 = Math.min(maxHeights.get(i+1), nmus[i]);
                            nmus[i + 1] = temp3;
                            sumtemp += temp3;
                        }
                    }
                    sum = Math.max(sumtemp,sum);
                }

            }
            //把最大值的小标提出了
            return sum;
    }
}

5).总结

  • Hash的正确遍历。

试题链接:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1038497.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot项目(百度AI整合)——如何在Springboot中使用文字识别OCR入门

前言 前言&#xff1a;本系列博客尝试结合官网案例&#xff0c;阐述百度 AI 开放平台里的组件使用方式&#xff0c;核心是如何在spring项目中快速上手应用。 本文介绍如何在Springboot中使用百度AI的文字识别OCR 其他相关的使用百度AI的文章列表如下&#xff1a; 如何在Spri…

【SpringBoot】-SpringBoot配置文件

作者&#xff1a;学Java的冬瓜 博客主页&#xff1a;☀冬瓜的主页&#x1f319; 专栏&#xff1a;【Framework】 主要内容&#xff1a;.properties 配置文件和 .yml 配置文件中 配置信息的设置和获取。关于IDEA乱码的解决。.yml 配置文件的 方式语法分析和演示。 .yml配置文件 …

芯片验证就是一次旅行

如果你国庆希望去一个你不曾去过的城市旅行&#xff0c;比如“中国苏州”。对游客来说&#xff0c;它是个蛮大的城市&#xff0c;有许多景点可以游玩&#xff0c;还有许多事情可以做。但实际上&#xff0c;即使最豪也最清闲的游客也很难看苏州的所有方方面面。同样的道理也适用…

第 4 章 串(文本行编辑实现)

1. 背景说明 该文本编辑器利用串的堆实现&#xff0c;其中对串的原始存储方式基本不作修改&#xff08;有部分修改之处&#xff09;&#xff0c;优化之处在于在串的末尾加上了一个空字符&#xff0c;目的是区分字符串结尾&#xff0c;便于将串保存在文件中&#xff0c;且该优化…

JavaScript入门——(2)基础语法(上)

一、JavaScript介绍 1.1 JavaScript是什么 1.1.1 JavaScript是什么&#xff1f; JavaScript是一种运行在客户端&#xff08;浏览器&#xff09;的编程语言&#xff0c;实现人机交互效果。 注意&#xff1a;HTML和CSS是标记语言。 1.1.2 作用&#xff08;做什么&#xff1f…

8月最新修正版风车IM即时聊天通讯源码+搭建教程

8月最新修正版风车IM即时聊天通讯源码搭建教程。风车 IM没啥好说的很多人在找,IM的天花板了,知道的在找的都知道它的价值,开版好像就要29999,后端加密已解,可自己再加密,可反编译出后端项目源码,已增加启动后端需要google auth双重验证,pc端 web端 wap端 android端 ios端 都有 …

小米机型解锁bl 跳“168小时”限制 操作步骤分析

写到前面的安全提示 了解解锁bl后的风险&#xff1a; 解锁设备后将允许修改系统重要组件&#xff0c;并有可能在一定程度上导致设备受损&#xff1b;解锁后设备安全性将失去保证&#xff0c;易受恶意软件攻击&#xff0c;从而导致个人隐私数据泄露&#xff1b;解锁后部分对系…

老胡的周刊(第109期)

老胡的信息周刊[1]&#xff0c;记录这周我看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。 &#x1f3af; 项目 lobe-chat[2] LobeChat 是一个开源的、可扩展…

面试题:说说Java并发运行中的一些安全问题

文章目录 1.什么是多线程并发运行安全问题&#xff1f;2.用synchronized修饰的方法3.同步块4.使用Synchronized修饰静态方法5.互斥锁6.死锁现象7.wait()和sleep()的区别 1.什么是多线程并发运行安全问题&#xff1f; 当多个线程并发操作一个数据时&#xff0c;由于线程操作的时…

在Linux上安装Percona Toolkit工具

安装步骤 1. 下载安装包 下载地址&#xff1a;https://www.percona.com/software/database-tools/percona-toolkit 2.上传并解压 上传tar包到服务器&#xff0c;并通过tar -zxvf 文件名.tar.gz解压。工具在bin文件夹中&#xff0c;这个是免安装的。 3. 配置环境变量 配置…

安装OpenSearch

title: “安装opensearch” createTime: 2021-11-30T19:13:4508:00 updateTime: 2021-11-30T19:13:4508:00 draft: false author: “name” tags: [“es”,“安装”] categories: [“OpenSearch”] description: “测试的” 说明 基于Elasticsearch7.10.2 的 opensearch-1.1.…

gRPC之实现TLS通信加密_已设置图床

gRPC之实现TLS通信加密 "crypto/tls"包 “crypto/tls” 是 Go 编程语言中的一个包&#xff0c;用于实现 TLS&#xff08;传输层安全&#xff09;协议。TLS 协议用于加密和保护网络通信&#xff0c;通常用于保护敏感数据的传输&#xff0c;如密码、支付信息等。在 G…

详解--计算机存储相关(寄存器、CPU Cache、内存、外存)

CPU寄存器、高速缓冲存储器、主存储器、外存储器 1. 主存储器 参考链接–主存 参考链接–内存 主存储器简称 主存&#xff0c;又称 内存储器&#xff08;简称 内存&#xff09;。作用 暂时存放CPU中的运算数据。存放指令和数据&#xff0c;并能由中央处理器&#xff08;CPU&a…

什么是Service Worker?它在PWA中的作用是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ Service Worker的作用是什么&#xff1f;⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前…

1066 二级C语言-自定义函数

输入一个正数x和一个正整数n&#xff0c;求下列算式的值。要求定义两个调用函数&#xff1a; &#xff08;1&#xff09;fact(n)计算n的阶乘&#xff1b; &#xff08;2&#xff09;mypow(x,n)计算x的n次幂&#xff08;即xn&#xff09;&#xff0c;两个函数的返回值类型是do…

HEC-HMS和HEC-RAS水文模型、防洪评价报告编制及洪水建模、洪水危险性评价等相关案例解析

► HEC-RAS一维、二维建模方法及应用 【目标】&#xff1a; 1.掌握一维数学模型基本地形导入方法 2.掌握恒定流、非恒定流一维数学模型水流计算方法 3.掌握一维数学模型计算结果分析&#xff0c;水面线成果分析及调试&#xff1b;流速分布图输出方法 4.掌握一维数学模型增设构…

如何让一个uniform variable在多级shader中都起作用(类似C语言的全局变量)?

GLSL编程中通常设计多个shader&#xff0c;如vertex shader, fragment shader等等。在最近的某个项目中&#xff0c;我需要定义一个变量&#xff0c;该变量类似C语言中的全局变量&#xff0c;要同时在两个shader中都起作用。c - OpenGL Uniform Across Multiple Shaders - Stac…

2023-9-23 区间选点

题目链接&#xff1a;区间选点 #include <iostream> #include <algorithm>using namespace std;const int N 100010;int n;struct Range {int l, r;bool operator< (const Range &W) const{return r < W.r;} }range[N];int main() {scanf("%d"…

MyBatisPlus + ShardingJDBC 批量插入不返回主键ID

本文讲述一个由 ShardingJDBC 使用不当引起的悲惨故事。 一. 问题重现 有一天运营反馈我们部分订单状态和第三方订单状态无法同步。 根据现象找到了不能同步订单状态是因为 order 表的 thirdOrderId 为空导致的&#xff0c;但是这个字段为啥为空&#xff0c;排查过程比较波折…

NebulaGraph实战:2-NebulaGraph手工和Python操作

图数据库是专门存储庞大的图形网络并从中检索信息的数据库。它可以将图中的数据高效存储为点&#xff08;Vertex&#xff09;和边&#xff08;Edge&#xff09;&#xff0c;还可以将属性&#xff08;Property&#xff09;附加到点和边上。本文以示例数据集basketballplayer为例…