[toc]
扫描线概念#
多个连续区间,计算叠加部分要去掉或者叠加某个价值,这种题常见于那种任务流
区间的坐标很大(一般是10^9)导致无法遍历坐标值, 但你可以遍历起点和终点坐标。
则可以将这些起点和终点作为纳入扫描点,逐个按从左到右的顺序扫描,并更新所谓的“高度"",每次做宽度 乘 高度的计算
步骤#
- 将终点和起点都放入数组排序, 并注意保留是起点还是终点的信息(有可能起点和终点相同,如果没保留这个标志可能导致出错)
- 从左到右扫描各点
- 扫描到某点时, 先不着急更新高度, 而是先计算"当前高度乘上(当前位置减去上一个位置)"。注意这个过程不需要区分是起点还是终点,都可以直接算。
- 计算完成后, 根据是起点还是终点,来更新所谓的高度
- 更新上一个位置