【发布时间】:2021-08-27 14:19:38
【问题描述】:
我有这个清单:
[29, 64, 65, 66, 128, 129, 130, 166, 167, 168, 184, 185, 186, 215, 216, 217, 237, 238, 239, 349, 350, 351, 443, 483, 484, 485, 495, 496, 497, 526, 527, 528, 542, 543, 544, 564, 565, 566]
我想将它们分开,如果元素与下一个元素之间的差异不同于 1,则代码会将下一个元素保存在另一个 lit 中
list1=[29]
liste2=[64, 65, 66]
liste3=[128, 129, 130]
liste3=[166, 167, 168]
直到最后
【问题讨论】:
-
这个列表总是排序的吗?
-
@Epsi95 如果不是,您只需在开始之前对其进行排序。我能想到的唯一其他选择涉及列表列表并检查每个单独的列表以插入一个元素,即 O(n^2).
-
我认为 O(nlong) + O(n) ~ O(nlogn) 是可能的,O(nlogn) 来自排序。我会遍历排序数组并检查差异 1 并继续进行分组。 @wjandrea
-
@Epsi95 这正是我的想法。请参阅this answer 了解 O(n) 实现,假设输入已排序。对列表进行排序(如果需要)是 O(n log n)。
标签: python