回答編集履歴

1

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

2021/09/02 08:41

投稿

lehshell
lehshell

スコア1147

test CHANGED
@@ -1,3 +1,73 @@
1
+ algobeginner さんのご指摘内容に対応しました。
2
+
3
+ 1点が3重に重なるケースは考慮していましたが1点が2重で3つの領域が重なるケースが考慮漏れしておりました。
4
+
5
+
6
+
7
+ ```Python
8
+
9
+ def merge_span(spans):
10
+
11
+ newspans = []
12
+
13
+ for tpl in spans:
14
+
15
+ for i, nums in enumerate(newspans):
16
+
17
+ if tpl[0] <= nums[0] <= tpl[1] or nums[0] <= tpl[0] <= nums[1]:
18
+
19
+ newspans[i] = (min(nums[0], tpl[0]), max(nums[1], tpl[1]))
20
+
21
+ newspans = merge_span(newspans)
22
+
23
+ break
24
+
25
+ else:
26
+
27
+ newspans.append(tpl)
28
+
29
+ return sorted(newspans)
30
+
31
+
32
+
33
+
34
+
35
+ def range_integrate(start_lis, end_lis):
36
+
37
+ spans = [*zip(start_lis, end_lis)]
38
+
39
+ return list(map(list, zip(*merge_span(spans))))
40
+
41
+
42
+
43
+ start_lis = [1, 3, 6]
44
+
45
+ end_lis = [4, 5, 8]
46
+
47
+ update_start_lis, update_end_lis = range_integrate(start_lis, end_lis)
48
+
49
+ print(update_start_lis) # [1, 6]
50
+
51
+ print(update_end_lis) # [5, 8]
52
+
53
+
54
+
55
+ start_lis = [6, 2, 3]
56
+
57
+ end_lis = [10, 4, 7]
58
+
59
+ update_start_lis, update_end_lis = range_integrate(start_lis, end_lis)
60
+
61
+ print(update_start_lis) # [2]
62
+
63
+ print(update_end_lis) # [10]
64
+
65
+ ```
66
+
67
+
68
+
69
+ 以下最初の回答内容です。
70
+
1
71
  参考
2
72
 
3
73
  ```Python