本题显然是扫描线的解法。我们只关心那些建筑两边的边缘线位置。对于每处边界,要么增加一幢楼:楼的总高度和楼的总数量都会变大;要么减少一幢楼:楼的总高度和楼的总数量都会变小。所以本题在每处边界,需要考虑两个差分量:分别反映楼的总高度的变化heightDiff,和当前楼的数量的变化countDiff。
因为同一处位置可能是多幢楼的边界,我们先用map,将同一处位置的这两个差分量做累积。然后按照位置排序后,用积分走一遍得到当前的height和count,就可以得到每个区段的平均值。
最后记得要把相邻的、平均值相等的区间要合并。平均值为零的区间也要舍弃。