如何减少列表遍历器的执行时间限制

我正在处理Code Signal上的Python问题,我试图查看给定的列表是否在仅从中删除一个元素时是严格递增的序列。因此,我构建了一些代码,在 for 循环中,从列表中删除元素并检查它是否是递增序列,然后在该确切索引处替换该元素并重新开始。这是代码:i


def almostIncreasingSequence(sequence):


    for i in range(len(sequence)):

        element = sequence[i]

        del sequence[i]


        if all(i < j for i, j in zip(sequence, sequence[1:])):

            return True

        sequence.insert(i, element)


    return False

代码运行良好,但它会导致执行时间错误。有没有办法改进这个现有的代码,让它运行得更快?


慕桂英4014372
浏览 90回答 1
1回答

守着一只汪

浏览列表会更快,将每个值与前一个值进行比较,以确保它严格增加。对于列表中的一个数字,允许此错误,并跳过此数字。不幸的是,这并不是那么简单,正如我们在下面看到的那样:不起作用(例如。[1,4,2,3])def almostIncreasingSequence(sequence):&nbsp; &nbsp; lastValue = sequence[0]&nbsp; &nbsp; removed_value = False&nbsp; &nbsp; for i in range(1,len(sequence)):&nbsp; &nbsp; &nbsp; &nbsp; if sequence[i] <= lastValue:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if removed_value:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return False&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; removed_value = True&nbsp; &nbsp; &nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lastValue = sequence[i]&nbsp; &nbsp; return True相反,如果我们遇到非增加,我们需要涵盖两种可能性:删除当前数字(例如。[1,2,1,3])或删除前一个(例如。[1,2,8,4])。我们还有一些边缘情况用于删除列表中的第一个或最后一个数字。最终(不那么漂亮)的解决方案def almostIncreasingSequence(sequence):&nbsp; &nbsp; lastValue = sequence[0]&nbsp; &nbsp; skipped_value = False&nbsp; &nbsp; for i in range(1,len(sequence)):&nbsp; &nbsp; &nbsp; &nbsp; if sequence[i] <= lastValue:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if i+1 == len(sequence):&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return not skipped_value # last number is not decreasing, skip if we can&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if skipped_value:&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # if we've already skipped a number - won't work&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return False&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; elif sequence[i+1] > sequence[i-1]:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # skipping the current number will fix it&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skipped_value = True&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lastValue = sequence[i-1]&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # try and skip the previous number&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skipped_value = True&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if i == 1 or sequence[i] > sequence[i-2]:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # can skip the previous number and it'll work&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lastValue = sequence[i]&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # we have no chance&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return False&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lastValue = sequence[i]&nbsp; &nbsp; return True
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python