leetcode-2865美丽塔

题目链接

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

解题思路

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

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

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

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

解题代码

复制代码
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
相关推荐
2401_8724187811 小时前
算法入门:并查集(Disjoint Set / Union-Find):连通性问题的利器
算法
luj_176811 小时前
R语言生态优势与学习曲线分析
c语言·开发语言·网络·经验分享·算法
计算机安禾11 小时前
【算法分析与设计】第36篇:计算几何基础:凸包问题的分治与扫描线解法
大数据·人工智能·算法·机器学习·剪枝
货拉拉技术11 小时前
飞速发展的计算机视觉
人工智能·算法
如竟没有火炬12 小时前
寻找峰值——二分
java·开发语言·数据结构·python·算法·散列表
noipp12 小时前
推荐题目:洛谷 P1115 最大子段和
算法
Lumbrologist12 小时前
【C++】零基础入门 · 第 17 节:多线程编程基础
java·c++·算法
轻闲一号机12 小时前
【语音】笔记
前端·笔记·算法
aWty_12 小时前
实分析入门(12)--可测函数
学习·数学·算法·实变函数
海砥装备HardAus13 小时前
无人机姿态解算中「重力矢量观测退化」机理与动态补偿技术
算法·无人机·飞控