本题是经典的 区间合并,核心是 排序算法 + 一次线性扫描(贪心)。
把所有领地看成若干闭区间 [xi,yi]。只要两个区间有公共部分就会产生冲突并合并;注意样例 3 明确说明 端点相接也算冲突([1,4] 与 [4,5] 合并为 [1,5])。
如果直接在原数组上两两判断,不仅复杂度高,而且合并会产生新区间、又需要与其余区间重新比较,很难写对。标准做法是:
在一根很高的竹子上生活着一群螳螂,每只螳螂都有一段自己的势力范围,不同螳螂在竹子上的领地有可能重叠,当发现自己的领地内出现其它螳螂时就会战斗,失败一方领地会被胜利一方螳螂占领。
给定一个螳螂领地信息 originalLand[i] 数组:originalLand[i] = [x, y] 表示第 i 只螳螂的领地在离地高度 [x,y] 之间的主干上 (x<y)。螳螂的数量在 [1,50] 之间,螳螂领地坐标 [x,y] 中,0≤x<y≤150。
请返回领地斗争结束后螳螂们的领地信息。返回的领地信息数组中,按照领地坐标升序返回;正确示例:[[3,7],[9,13]],错误示例:[[9,13],[3,7]]。
输入
[[1,5],[4,6],[8,15]]
输出
[[1,6],[8,15]]
说明
第一只螳螂的领地范围 [1,5] 和第二只螳螂的领地范围 [4,6] 有重叠,因此两只螳螂在巡逻过程中会发生冲突,最终一只螳螂被打败,两只螳螂的领地被胜利者占有,领地范围变为 [1,6]。
输入
[[3,7],[9,13]]
输出
[[3,7],[9,13]]
说明
两只螳螂的领地范围没有重叠,因此不会发生冲突,所以最终的领地状态和最初的领地状态是一致的。
输入
[[1,4],[4,5]]
输出
[[1,5]]
说明
两只螳螂领地边界接触时也会触发冲突,形成领地合并。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.