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
相关推荐
金幄科技5 小时前
RAG第四篇:重排序 Rerank——粗召回之后,为什么还需要一次精排
人工智能·算法·ai·ai编程
M78佐菲5 小时前
Linux学习笔记:文件IO
linux·笔记·学习·算法
lhldsg6 小时前
课程排课系统实战指南:从数据库设计到算法调优全流程解析
java·数据库·算法·小程序
BSD_HY6 小时前
薄膜开关矩阵扫描电路设计中的防鬼键措施
人工智能·算法·矩阵·人机交互·薄膜开关·源头工厂·深圳工厂
linux-hzh6 小时前
百日算法修炼 · Day 17
数据结构·算法
XUEYUAN52126 小时前
代理日志分析与监控:代理池健康状态巡检与分级告警体系搭建(运维实战)
运维·网络·网络协议·tcp/ip·算法·架构
sel_96 小时前
【多轮对话论文导读(七)】多轮对话论文阅读笔记:从数据生成、用户模拟到上下文重构与长期记忆
论文阅读·人工智能·笔记·深度学习·算法·语言模型·自然语言处理
远游客07137 小时前
为什么用「年×100+月」做比较
算法·gin
leavesleo7 小时前
DeepSeek 偷偷给你取外号?拆一下 AI 人格化背后的技术
算法
liliangcsdn8 小时前
skewness收益偏度取负因子背后逻辑的探索
人工智能·算法·机器学习