非 C# 特定的答案:
- 按数组的最小值对数组进行排序
- 遍历数组
- 如果当前数组的最大元素小于下一个数组的最小元素,我们没有重叠,所以什么都不做
- 如果要从当前数组中删除元素,请从等于下一个数组的最小值的元素中删除。
- 如果要从下一个数组中删除元素,请截取等于当前数组最大值的元素。
由于这些是数组并且顺序元素加一,我们可以通过做一个简单的减法来确定剪切索引,我们不需要遍历数组。
这将删除数组的顺序,但从示例中看,这似乎并不重要。
如果很重要,保留每个数组的原始索引并不难。
如果一个数组可以与多个其他数组重叠(在同一侧),可能会有一些额外的复杂性,但处理起来应该不会太难。
例子:
Input: {{0,1,2,3,4}, {6,7,8,9}, {5,6,7}, {10}}
Sorted: {{0,1,2,3,4}, {5,6,7}, {6,7,8,9}, {10}}
Arrays 1 and 2:
4 < 5, no overlap
Arrays 2 and 3:
7 >= 6, overlap
Either cut off 6 and 7 from array 2, or 6 and 7 from array 3
(depending on what output you want)
Arrays 3 and 4:
9 < 10, no overlap
Output:
{{0,1,2,3,4}, {5}, {6,7,8,9}, {10}}
or
{{0,1,2,3,4}, {5,6,7}, {8,9}, {10}}