2 条题解
-
2
Part 1:最大面积
把每个栅栏看成一个长为 的窗口,选一些窗口覆盖位置,每个位置取覆盖它的窗口高度的 min。最大面积 = 每个位置独立取 max。
对每个窗口 ,定义:
即该窗口能达到的最大高度(受限于窗口内最矮的 )。
位置 能被窗口 覆盖当且仅当 。所以位置 的最终高度:
两次滑动窗口:
- 第一次:滑动窗口 min 求出所有
- 第二次:滑动窗口 max 求出所有
答案 1 = 。
Part 2:最少栅栏数
已知每个位置 需要被高度至少 的窗口覆盖。按高度值分组处理:
对于每种高度 ,有:
- :需要高度 的位置集合
- :能提供高度 的窗口起点集合
对每组 ,贪心:双指针,对每个未覆盖的位置 ,在 中选右端点最远的窗口(即 最大),一次操作覆盖尽可能多的连续位置。
总操作数累加即答案。
复杂度
滑动窗口 O(),贪心按高度分组总共每个位置和窗口各遍历一次 O()。整体 O()。
后记
实际上可以用multiset代替滑动窗口。
信息
- ID
- 2819
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 6
- 标签
- (无)
- 递交数
- 19
- 已通过
- 8
- 上传者