wy的leetcode刷题记录_Day76

wy的leetcode刷题记录_Day76

声明

本文章的所有题目信息都来源于leetcode
如有侵权请联系我删掉!
时间:2024-1-24

前言

目录

  • wy的leetcode刷题记录_Day76
    • 声明
    • 前言
    • 2865. 美丽塔 I
      • 题目介绍
      • 思路
      • 代码
      • 收获

2865. 美丽塔 I

今天的每日一题是:2865. 美丽塔 I

题目介绍

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

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

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

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

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

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

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

示例 1:

输入:maxHeights = [5,3,4,1,1]
输出:13
解释:和最大的美丽塔方案为 heights = [5,3,3,1,1],这是一个美丽塔方案,因为:

  • 1 <= heights[i] <= maxHeights[i]
  • heights 是个山脉数组,峰值在 i = 0 处。
    13 是所有美丽塔方案中的最大高度和。

示例 2:
输入:maxHeights = [6,5,3,9,2,7]
输出:22
解释: 和最大的美丽塔方案为 heights =
[3,3,3,9,2,2] ,这是一个美丽塔方案,因为:

  • 1 <= heights[i] <= maxHeights[i]
  • heights 是个山脉数组,峰值在 i = 3 处。 22 是所有美丽塔方案中的最大高度和。

示例 3:
输入:maxHeights = [3,2,5,5,2,3]
输出:18
解释:和最大的美丽塔方案为 heights = [2,2,5,5,2,2] ,这是一个美丽塔方案,因为:

  • 1 <= heights[i] <= maxHeights[i]
  • heights 是个山脉数组,最大值在 i = 2 处。 注意,在这个方案中,i = 3 也是一个峰值。 18 是所有美丽塔方案中的最大高度和。

思路

模拟法:乍一看这道题蛮复杂的,其实仔细思考过后这道题就是三个条件,所有的高度要在maxheight之下且height满足山脉数组,即一个凸型。我们根据已知的maxheight遍历每一个位置,每次遍历选取一个山头(即凸点),俩边若maxheight[i]大于凸点那么height只能取凸点的值;否则取maxheight的值,并且维护一个临界值将其置为maxheight[i],用来确保height是为山脉数组。

代码

class Solution {
public:
    long long maximumSumOfHeights(vector<int>& maxHeights) {
        int n=maxHeights.size();
        long long ans=0;
        for(int i=0;i<n;i++)
        {   
            long long temp=maxHeights[i];
            long long height=-1*temp;
            for(int j=i;j>=0;j--)
            {
                if(temp>=maxHeights[j])
                {
                    height+=maxHeights[j];
                    temp=maxHeights[j];
                }
                else
                {
                    height+=temp;
                }
            }
            temp=maxHeights[i];
            for(int j=i;j<n;j++)
            {
                if(temp>=maxHeights[j])
                {
                    height+=maxHeights[j];
                    temp=maxHeights[j];
                }
                else
                {
                    height+=temp;
                }
            }
            ans=max(ans,height);
        }
        return ans;
    }
};

收获

简单的模拟题,重要的是寻找题目中巧妙的解法。

你可能感兴趣的:(leetcode,算法)