擅长:python、mysql、java
<p>Python来了<a href="https://docs.python.org/3/library/itertools.html" rel="nofollow">batteries included</a>:</p>
<pre><code>from itertools import chain
flatten = chain.from_iterable
LEFT, RIGHT = 1, -1
def join_ranges(data, offset=0):
data = sorted(flatten(((start, LEFT), (stop + offset, RIGHT))
for start, stop in data))
c = 0
for value, label in data:
if c == 0:
x = value
c += label
if c == 0:
yield x, value - offset
if __name__ == '__main__':
print list(join_ranges([[138, 821], [900, 910], [905, 915]]))
print list(join_ranges([[138, 821], [900, 910], [905, 915]], 80))
</code></pre>
<p>结果:</p>
^{pr2}$
<p>工作原理:我们将每个起点和终点都标记为这样,然后进行排序,然后我们简单地对每个起点的<em>向上计数</em>,对每个终点计数<em>向下</em>。如果我们访问了相同数量的起点和终点,我们就有一个闭合(连接)范围。在</p>