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
相关推荐
leobertlan4 小时前
痛苦系列 | DSP-03 跨越单位圆:Z变换与零极点分析
算法·程序员
蛋蛋的就会顺顺的4 小时前
hot100 p0——栈,贪心算法,动态规划
java·前端·javascript·算法·leetcode·力扣
开发小能手1235 小时前
答案daanC语言
数据结构·算法
小 黄 鸡5 小时前
HashMap 面试必会知识点详解(JDK 8)
java·面试·职场和发展
Navigator_Z6 小时前
LeetCode //C - 1291. Sequential Digits
c语言·算法·leetcode
pride.li8 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
旺仔仔仔8 小时前
机器人项目实战(5):从单次抓取,到接收指令连续做事
算法
旺仔仔仔9 小时前
机器人项目实战(2):识别物体、提取点云,再到抓取姿态
算法
姜鱼问生9 小时前
密码明明一样,为什么 GPG 说“错的“?
后端·算法·架构
启观川9 小时前
数据结构与算法-第 3 章 常用算法-贪心算法
数据结构·笔记·python·算法·贪心算法