例如,如果列表是:[2,1,2,5,7,6,9],有3种可能的分割方式:
[2,1,2] [5,7,6,9]
[2,1,2,5] [7,6,9]
[2,1,2,5,7,6] [9]
我需要计算列表可以被分成多少部分,以使得左边的每个元素都小于右边的每个元素。因此,对于这个列表,输出将是3。
以下是我的当前解决方案:
上面的代码实现了正确的功能,但它不符合O(n)的时间复杂度。我该如何获得相同的结果,但速度更快?
[2,1,2] [5,7,6,9]
[2,1,2,5] [7,6,9]
[2,1,2,5,7,6] [9]
我需要计算列表可以被分成多少部分,以使得左边的每个元素都小于右边的每个元素。因此,对于这个列表,输出将是3。
以下是我的当前解决方案:
def count(t):
c= 0
for i in range(len(t)):
try:
if max(t[:i]) < min(t[i:]):
c+=1
except:
continue
return c
上面的代码实现了正确的功能,但它不符合O(n)的时间复杂度。我该如何获得相同的结果,但速度更快?
n²
),因为对于每个 for 循环的迭代i
,您需要扫描两个长度为n
的列表切片,一个是max
(O(i
) 时间复杂度),另一个是min
(O(n-i
) 时间复杂度)。 - jfaccioni