gpt4 book ai didi

Python:算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:46:14 25 4
gpt4 key购买 nike

<分区>

问题:给定一个无序时间戳列表,找到重叠的最大时间跨度
例如:[1,3]、[10,15]、[2,7]、[11,13]、[12,16]、[5,8] => [1,8] 和 [10,16 ]

我被要求解决上述问题。

我最初的方法如下:

times = [[1,3],[10,15],[2,7],[11,13],[12,16],[5,8]]
import itertools
def flatten(listOfLists):
return itertools.chain.from_iterable(listOfLists)
start = [i[0] for i in times]
end = [i[1] for i in times]
times = sorted(list(flatten(times)))
# 1=s, 2=s, 3=e, 5=s, 7=e, 8=e, 10=s, 11=s, 12=s, 13=e, 15=e, 16=e
num_of_e = 0
num_of_s = 0
first_s = 0
for time in times:
if first_s == 0:
first_s = time
if time not in end:
num_of_s += 1
if time in end:
num_of_e += 1
if num_of_e == num_of_s:
num_of_e = 0
num_of_s = 0
print [first_s, time]
first_s = 0

然后,提问者坚持我应该先排序时间来解决它,因为“它更好”所以我做了以下

times = [[1,3],[10,15],[2,7],[11,13],[12,16],[5,8]]
def merge(a,b):
return[min(a[0],b[0]), max(a[1],b[1])]
times.sort()
# [1,3] [2,7] [5,8] [10,15] [11,13] [12,16]
cur = []
for time in times:
if not cur:
cur = time
continue
if time[0] > cur[0] and time[0] < cur[1]:
cur = merge(time,cur)
else:
print cur
cur = time
print cur

有没有“更好”的方法(或者可能更好的另一种方法)?我知道我可以计时,看看哪个更快,或者只是根据大 O 符号进行评估(实际工作部分都是 O(N))。

想看看大家对此有什么看法吗?
您更喜欢哪一个,为什么?
或者也许其他方法可以做到这一点?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com