园林里有一排共 n 棵树,每棵树的初始高度为 H[i] 。修建要求是:对于任意一棵树,不会有左右两边同时存在比它高的树,且修剪后所有树的高度总和最大。现在想知道修剪后每棵树的高度。
第一行一个整数 n ,表示一排有 n 颗树。 第二行 n 个整数 H[i] 以空格隔开,表示每棵树的初始高度。
一行 n 个整数以空格隔开,表示修剪后每棵树的高度。
7 1 2 1 2 1 2 1
1 1 1 1 1 2 1
5 1 2 3 2 1
1 2 3 2 1
考点:贪心
限制 1 秒 / 128MB | 标准输入输出
推荐方向:贪心
本题切入点
约束等价于修剪后序列没有「谷」;从左到右和从右到左各扫一遍取较小值,得到每棵树能保留的最大高度。
每一步都取当前最优,靠问题性质保证局部最优能拼成全局最优。
思路框架(贪心 通法 · 非本题专属)
实现要点:贪心题关键在于排序规则:按什么关键字排序决定了策略是否正确。
复杂度:时间 O(n log n)(含排序) | 空间 O(1) ~ O(n)
该范式的通法易错点
样例 1
7 / 1 2 1 2 1 2 11 1 1 1 1 2 1样例 2
5 / 1 2 3 2 11 2 3 2 1解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:贝壳找房2023届校招前端类试卷。