teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

algobeginner さんのご指摘内容に対応

2021/09/02 08:41

投稿

lehshell
lehshell

スコア1180

answer CHANGED
@@ -1,3 +1,38 @@
1
+ algobeginner さんのご指摘内容に対応しました。
2
+ 1点が3重に重なるケースは考慮していましたが1点が2重で3つの領域が重なるケースが考慮漏れしておりました。
3
+
4
+ ```Python
5
+ def merge_span(spans):
6
+ newspans = []
7
+ for tpl in spans:
8
+ for i, nums in enumerate(newspans):
9
+ if tpl[0] <= nums[0] <= tpl[1] or nums[0] <= tpl[0] <= nums[1]:
10
+ newspans[i] = (min(nums[0], tpl[0]), max(nums[1], tpl[1]))
11
+ newspans = merge_span(newspans)
12
+ break
13
+ else:
14
+ newspans.append(tpl)
15
+ return sorted(newspans)
16
+
17
+
18
+ def range_integrate(start_lis, end_lis):
19
+ spans = [*zip(start_lis, end_lis)]
20
+ return list(map(list, zip(*merge_span(spans))))
21
+
22
+ start_lis = [1, 3, 6]
23
+ end_lis = [4, 5, 8]
24
+ update_start_lis, update_end_lis = range_integrate(start_lis, end_lis)
25
+ print(update_start_lis) # [1, 6]
26
+ print(update_end_lis) # [5, 8]
27
+
28
+ start_lis = [6, 2, 3]
29
+ end_lis = [10, 4, 7]
30
+ update_start_lis, update_end_lis = range_integrate(start_lis, end_lis)
31
+ print(update_start_lis) # [2]
32
+ print(update_end_lis) # [10]
33
+ ```
34
+
35
+ 以下最初の回答内容です。
1
36
  参考
2
37
  ```Python
3
38
  def range_integrate(start_lis, end_lis):