2866. 美丽塔 II --力扣 --JAVA

题目

给你一个长度为 n 下标从 0 开始的整数数组 maxHeights 。

你的任务是在坐标轴上建 n 座塔。第 i 座塔的下标为 i ,高度为 heights[i] 。

如果以下条件满足,我们称这些塔是 美丽 的:

  1. 1 <= heights[i] <= maxHeights[i]
  2. heights 是一个 山脉 数组。

如果存在下标 i 满足以下条件,那么我们称数组 heights 是一个 山脉 数组:

  • 对于所有 0 < j <= i ,都有 heights[j - 1] <= heights[j]
  • 对于所有 i <= k < n - 1 ,都有 heights[k + 1] <= heights[k]

请你返回满足 美丽塔 要求的方案中,高度和的最大值 。

解题思路

  1. 将列表转换成数组,方便读取数据;
  2. 假设所有节点都可以作为最高峰:
    1. 当前节点小于下一节点则跳过当前节点直接使用下个节点作为最高峰;
    2. 当前节点小于等于上一节点,则当前节点的高度和一定小于等于上一节点,跳过当前节点。
  3. 以当前节点为最高峰向左右边界遍历,返回最大的高度和。

代码展示

java 复制代码
class Solution {
    public long maximumSumOfHeights(List<Integer> maxHeights) {
        int n = maxHeights.size();
        int[] a = maxHeights.stream().mapToInt(i -> i).toArray();
        long ans = 0L;
        for (int num = 0; num < n; num++) {
            if(num < n - 1 && a[num] < a[num + 1]){
                continue;
            }
            if(num > 0 && a[num] <= a[num - 1]) {
                continue;
            }
            int left = a[num];
            int right = left;
            long res = left;
            for (int i = num - 1; i >= 0; i--) {
                int temp = a[i];
                if (temp > left) {
                    res += left;
                } else {
                    left = temp;
                    res += temp;
                }
            }
            for (int i = num + 1; i < n; i++) {
                int temp = a[i];
                if (temp > right) {
                    res += right;
                } else {
                    res += temp;
                    right = temp;
                }
            }
            ans = Math.max(ans,res);
        }
        return ans;
    }
}
相关推荐
二十七日秋21 分钟前
算法刷题笔记「Day 1|四道 OJ 入门题里的深坑」
c语言·汇编·数据结构·c++·笔记·python·算法
晚风叙码35 分钟前
Linux 进程概念(下):程序地址空间与虚拟内存
linux·服务器·算法
silvamux_1 小时前
微头条爆款体平台适配实测:把交付要求变成可计算的指标
java·线性代数·算法·决策树·矩阵
重生之小比特1 小时前
【算法拾光】前缀和|连续的子数组和 + 和相同的二元子数组
算法·leetcode·哈希算法
一去不复返的通信er2 小时前
力扣15:盛最多水的容器
算法·leetcode
Navigator_Z2 小时前
LeetCode //C - 1309. Decrypt String from Alphabet to Integer Mapping
c语言·算法·leetcode
潇湘秦2 小时前
SQL Server 2016+ 整数类型元数据扩宽(秒级变更)完整说明
数据库·算法
小白起 v2 小时前
02-数组与链表
数据结构·链表
Figo_Cheung3 小时前
Figo基于结构空间算法假设(SSAH)的生成式大模型优化范式与工程实现边界研究——提出适应AGI架构演化的自适应拓扑感知表征机制
算法·架构·agi
旖旎夜光3 小时前
LCR 170:交易逆序对的总数(归并排序) —— 题解
c++·学习·算法·leetcode·排序算法