【Leetcode】2865. 美丽塔 I

这篇具有很好参考价值的文章主要介绍了【Leetcode】2865. 美丽塔 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

思路

根据问题描述,假设数组的长度为 n,定义山状数组 heights 如下:

  • 如果 heights[i] 为数组中的最大值,则 heights[i] 左边的值均小于等于 heights[i],右边的值均小于等于 heights[i]。
  • heights[i] 的左侧,从 0 开始到 i 为非递减关系。
  • heights[i] 的右侧,从 i 开始到 n-1 为非递增关系。

题目给定了山状数组每个元素的上限,即 heights[i] ≤ maxHeights[i]。要求返回山状数组所有元素之和的最大值。

分析得知:

  • 对于 j ∈ [0,i−1],此时 max(heights[j]) = min(heights[j+1], maxHeights[j]);
  • 对于 j ∈ [i+1,n−1],此时 max(heights[j]) = min(heights[j−1], maxHeights[j]);
  • 山状数组的山顶为 heights[i],整个数组的所有元素的最大值即可确定,数组元素和的最大值也可确定;
  • 数组中的每个元素尽量取最大值使得整个数组元素之和最大。

因此,通过两层循环,外层循环枚举 maxHeights[i] 为山顶,在内层循环中分别求出索引 i 的左侧元素与右侧元素,即可求出所有元素之和,返回元素之和的最大值。最后一定要注意数据范围,这里白wa俩发真是无语辽。min函数里面的数据类型也要一样。

代码

class Solution {
public:
    long long maximumSumOfHeights(vector<int>& maxHeights) {
        long long ans=0;
        long long maxzhi=INT_MIN;
        long long n=maxHeights.size();
        for(int idx=0;idx<n;++idx)
        {
            long long sum=maxHeights[idx];
            long long zhi=maxHeights[idx];
            for(int i=idx-1;i>=0;--i)
            {
                zhi=min((long long)maxHeights[i],zhi);
                sum+=zhi;
            }
            zhi=maxHeights[idx];
            for(int i=idx+1;i<n;++i)
            {
                zhi=min((long long)maxHeights[i],zhi);
                sum+=zhi;
            }
            ans=max(ans,sum);
        }
        return ans;
    }
};

结果

【Leetcode】2865. 美丽塔 I,练习题(记录做题想法),leetcode,算法,职场和发展文章来源地址https://www.toymoban.com/news/detail-837077.html

到了这里,关于【Leetcode】2865. 美丽塔 I的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 力扣(LeetCode)数据结构练习题(2)

    今天又写了两道关于链表的练习题,来给大家分享一下。巩固一下上一篇学到的链表知识,题目可以然我们更清楚的认识链表。 目录 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表 给你单链表的头结点 head ,请你找出并返回链表的中间结点。如果有两个中

    2024年02月21日
    浏览(38)
  • 【LeetCode】练习习题集【4月 - 7 月】

    1.重复数 题目: 代码: 9.回文数 题目: 思路: 如果是负数一定不是回文数 直接返回false 如果是正数,则将其倒序数值计算出来,然后比较和原数值是否相等 如果是回文数相等返回true 不相等返回false 代码: 13. 罗马数字转整数 (https://leetcode.cn/problems/roman-to-integer/) 题目:

    2024年02月13日
    浏览(29)
  • 【数据结构】顺序表详解(附leetcode练习题)

    ☃️个人主页:fighting小泽 🌸作者简介:目前正在学习C语言和数据结构 🌼博客专栏:数据结构 🏵️欢迎关注:评论👊🏻点赞👍🏻留言💪🏻 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺

    2023年04月27日
    浏览(36)
  • 模拟实现atoi函数(将数字字符串转换为整型)附加leetcode练习题

    各位朋友们,大家好啊!今天我为大家分享的知识是如何模拟实现atoi函数。相信大家如果能够理解这个知识,对大家以后的刷题是有帮助的。 我们要想实现某个函数,我们肯定要先知道这个函数的作用是什么,然后我们再根据它的作用来自己实现。我们先来看看stoi函数在库

    2023年04月19日
    浏览(41)
  • 【数据结构】算法的时间复杂度和空间复杂度(下)(附leetcode练习题)

    ☃️个人主页:fighting小泽 🌸作者简介:目前正在学习C语言和数据结构 🌼博客专栏:数据结构 🏵️欢迎关注:评论👊🏻点赞👍🏻留言💪🏻 空间复杂度也是一个数学表达式,是对一个算法在运行过程中 临时占用的额外的存储空间大小的量度 。 空间复杂度不是程序占用

    2023年04月19日
    浏览(71)
  • 【数据结构】 算法的时间复杂度和空间复杂度 (上)(附leetcode练习题)

    ☃️个人主页:fighting小泽 🌸作者简介:目前正在学习C语言和数据结构 🌼博客专栏:数据结构 🏵️欢迎关注:评论👊🏻点赞👍🏻留言💪🏻 如何衡量一个算法的好坏呢?比如对于以下斐波那契数列: 斐波那契数列的递归实现方式非常简洁,但简洁一定好吗?那该如何

    2023年04月14日
    浏览(21)
  • 【数据结构】算法的时间复杂度和空间复杂度 (上)(附leetcode练习题)

    ☃️个人主页:fighting小泽 🌸作者简介:目前正在学习C语言和数据结构 🌼博客专栏:数据结构 🏵️欢迎关注:评论👊🏻点赞👍🏻留言💪🏻 如何衡量一个算法的好坏呢?比如对于以下斐波那契数列: 斐波那契数列的递归实现方式非常简洁,但简洁一定好吗?那该如何

    2023年04月22日
    浏览(48)
  • 【Java练习题汇总】《第一行代码JAVA》综合测试三,汇总Java练习题

    线程的启动方法是( )。 A. run() B. start() C. begin() D. accept() Thread 类提供表示线程优先级的静态常量,代表普通优先级的静态常量是( )。 A. MAX_PRIORITY B. MIN_PRIORITY C. NORMAL_PRIORITY D. NORM_PRIORITY 设置线程优先级的方法是( )。 A. setPriority() B. getPriority() C. getName() D. setName() 下面 ( )方法是

    2024年02月14日
    浏览(30)
  • 树状数组练习题

    为什么大佬们一眼看出是树状数组呢? 不是一眼看出树状数组,而是 要把 【找两个相邻的最小值之间还有几个数没删掉】 的问题转变成动态区间和问题,这个转化过程才是最重要的 , 至于你用什么数据结构求动态区间和是次要的,很多数据结构都能做,最常用的树状数组

    2024年02月03日
    浏览(30)
  • python 基础练习题

    目录 1、定义两个变量,交换两个变量【使用多种方式】 2、给定成绩,判断用户成绩的档次 3. 作业:下列哪一项是“4是奇数或-9为正数”的否定( ) 4. 作业:判断一个整数是奇数还是偶数 5. 求矩形的面积和周长 6. 根据天数(从控制台上输入)计算这一年中的周数和剩余的

    2024年04月12日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包