【发布时间】:2021-12-28 23:00:36
【问题描述】:
我编写了以下算法作为Codility Flags 的解决方案。这会通过正确性检查,但在大多数性能检查中都会超时。
其复杂度应为O(m**2),其中m 是A 中的峰值数,n 是A 的长度。但是,while potentialK > maxFlags 循环应该只在找到满足条件的合适数量的标志之前执行。我不确定如何进一步优化时间复杂度。
def solution(A):
peaks = []
distances = []
if len(A) == 1: return 0
for i in range(1, len(A) -1):
if A[i] > A[i-1] and A[i] > A[i+1]:
if len(distances) == 0:
distances.append(i)
else:
distances.append(i - peaks[-1])
peaks.append(i)
if len(peaks) == 0: return 0
if len(peaks) == 1: return 1
if len(peaks) == 2: return 2 if peaks[1] - peaks[0] >= 2 else 1
potentialK = len(peaks)
maxFlags = 0
while potentialK > maxFlags:
cumDistance = 0
flags = 0
firstFlag = True
for i in range(1, len(distances)):
cumDistance += distances[i]
if cumDistance >= potentialK:
if firstFlag:
flags += 2
firstFlag = False
else:
flags += 1
cumDistance = 0
if flags > maxFlags and flags == potentialK:
return flags
elif flags > maxFlags and potentialK > flags:
maxFlags = flags
potentialK -= 1
return maxFlags
【问题讨论】:
标签: python algorithm time-complexity