leetcode-2865美丽塔

题目链接

2865. 美丽塔 I - 力扣(LeetCode)

解题思路

根据题意可以知道,假设数组的长度为n,对于山状数组heights定义如下:

  • 假设heights[i]为数组中的最大值,则i左边的值均小于等于heights[i],i右边的值均小于等于heights[i];
  • i的左侧,从0开始到i为非递归递减关系,即j属于[1,i]时,均满足heights[j-1]<=heights[j];
  • i的右侧,从i开始到n-1为非递归关系,即j属于[i,n-2]时,均满足heights[j+1]<=heights[j];

题目给出了山状数组中每个元素的上限,即heights[i]<=maxheights[i],题目要求返回的山状数组左右元素之和的最大值。根据以上分析可知:

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

解题代码

复制代码
class Solution:
    def maximumSumOfHeights(self, maxHeights: List[int]) -> int:
        n = len(maxHeights)
        res = 0
        for i in range(n):
            pre, psum = maxHeights[i], maxHeights[i]
            for j in range(i - 1, -1, -1):
                pre = min(pre, maxHeights[j])
                psum += pre
            suf = maxHeights[i]
            for j in range(i + 1, n):
                suf = min(suf, maxHeights[j])
                psum += suf
            res = max(res, psum)
        return res
相关推荐
zmzb0103几秒前
C++课后习题训练记录Day85
开发语言·c++·算法
2301_822366354 分钟前
C++中的协程编程
开发语言·c++·算法
m0_736919104 分钟前
C++中的事件驱动编程
开发语言·c++·算法
嵌入小生0075 分钟前
数据结构基础内容 + 顺序表 + 单链表的学习---嵌入式入门---Linux
linux·数据结构·学习·算法·小白·嵌入式软件
xhbaitxl8 分钟前
算法学习day30-贪心算法
学习·算法·贪心算法
小程同学>o<10 分钟前
嵌入式之C/C++(三)指针
c语言·c++·算法·嵌入式软件·嵌入式面试题库
季明洵12 分钟前
两数之和、四数相加II、三数之和、四数之和
java·数据结构·算法·leetcode·蓝桥杯·哈希算法
机器学习之心13 分钟前
基于AHP(层次分析法)-模糊综合评价法的工程实践能力评价系统MATLAB代码
算法·matlab·层次分析法·模糊综合评价法
好学且牛逼的马15 分钟前
【Hot100|19-LeetCode 48. 旋转图像 】
leetcode
程序员三藏17 分钟前
自动化测试步骤详解
自动化测试·软件测试·python·测试工具·程序人生·职场和发展·测试用例