无锡网站定制宝塔面板怎么做自己的网站
news/
2025/9/27 14:15:53/
文章来源:
无锡网站定制,宝塔面板怎么做自己的网站,怎样在网站上做办公家具,怎么做页眉页脚#x1f680; 算法题 #x1f680; #x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 #x1f340; #x1f332; 越难的东西,越要努力坚持#xff0c;因为它具有很高的价值#xff0c;算法就是这样✨ #x1f332; 作者简介#xff1a;硕风和炜#xff0c;… 算法题 算法刷题专栏 | 面试必备算法 | 面试高频算法 越难的东西,越要努力坚持因为它具有很高的价值算法就是这样✨ 作者简介硕风和炜CSDN-Java领域新星创作者保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享 恭喜你发现一枚宝藏博主,赶快收入囊中吧 人生如棋我愿为卒行动虽慢可谁曾见我后退一步 算法题 目录 题目链接⛲ 题目描述 求解思路实现代码运行结果⚡ 单调栈 前后缀数组 求解思路 实现代码 运行结果 共勉 题目链接
2866. 美丽塔 II
⛲ 题目描述
给你一个长度为 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 是所有美丽塔方案中的最大高度和。
提示
1 n maxHeights 105 1 maxHeights[i] 109 求解思路实现代码运行结果 ⚡ 单调栈 前后缀数组 求解思路
美丽塔 I 给定的数据范围通过暴力就可以过掉但是也不是说暴力就很简单。该题目给定的数据范围更大了无法通过前面的解法通过所以我们必须要在原来的基础上继续优化优化掉重复计算的过程。计算后缀sum统计和维护递增的单调栈每次枚举山峰位置的时候如果当前的高度是小于等于单调栈中栈顶的元素此时将元素弹出同时将之前等于该位置元素的值都删除sum - (long)maxHeights.get(j) * (j - pre.peekLast())。弹出元素结束此时更新元素的值开始i添加sum (long)maxHeights.get(i) * (suf.peekLast() - i);计算求解sum的数值此时存到后缀数组当中去并且将当前下标存储到栈中。继续迭代该过程。前缀同理最后循环遍历找到ans Math.max(ans, suffix[i 1] prefix[i]) 最大高度和。实现代码如下所示 实现代码
class Solution {public long maximumSumOfHeights(ListInteger maxHeights) {int n maxHeights.size();long[] suffix new long[n 1];DequeInteger suf new LinkedList();suf.addLast(n);long sum 0;for (int i n - 1; i 0; i--) {int x maxHeights.get(i);while (suf.size() 1 x maxHeights.get(suf.peekLast())) {int j suf.pollLast();sum - (long)maxHeights.get(j) * (suf.peekLast() - j);}sum (long)maxHeights.get(i) * (suf.peekLast() - i);suffix[i] sum;suf.addLast(i);}long[] prefix new long[n 1];DequeInteger pre new LinkedList();pre.addLast(-1);sum 0;for (int i 0; i n; i) {int x maxHeights.get(i);while (pre.size() 1 x maxHeights.get(pre.peekLast())) {int j pre.pollLast();sum - (long)maxHeights.get(j) * (j - pre.peekLast());}sum (long)maxHeights.get(i) * (i - pre.peekLast());prefix[i] sum;pre.addLast(i);}long ans 0;for (int i 0; i n; i) {ans Math.max(ans, suffix[i 1] prefix[i]);}return ans;}
}运行结果 共勉
最后我想和大家分享一句一直激励我的座右铭希望可以与大家共勉
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/919562.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!