谁能帮我减少python代码的执行时间

时间:2017-07-26 12:35:21

标签: python-3.x optimization

时间限制为4000毫秒,但输入太大,超出了执行时间限制。任何人都可以告诉我在哪里以及如何优化我的代码。任务是:

  

给定一个整数序列作为数组,确定它是否为   可以通过不再删除来获得严格增加的序列   比数组中的一个元素。

提前谢谢。

PS:此任务也适用于CodeFights。

def almostIncreasingSequence(sequence): # The main function
    for x in range(0,len(sequence)):
         copyOfSequence = copySequence(sequence)
         del copyOfSequence[x]
         if checkSequence(copyOfSequence) == True:
             return True
    return False

def copySequence(sequence):    # Create a sequence that is the same with input
    copyOfSequence = sequence[::]
    return copyOfSequence

#Check if the sequence is a strictly increasing sequence when I remove a element
def checkSequence(sequence):
    for i in range(0, len(sequence) - 1):
        if sequence[i] >= sequence[i + 1]: return False
    return True

2 个答案:

答案 0 :(得分:0)

  

给定一个整数序列作为数组,通过从数组中删除不超过一个元素来确定是否可以获得严格增加的序列。

首先,在整个阵列中获取运行差异:

import numpy as np
d = np.diff(a)

然后计算它不是正数的次数:

c = (d <= 0).sum()

如果c大于1,则不可能。如果c为0,则可以。如果c为1,找到它的位置:

i = np.where(d <= 0)[0][0]

然后检查删除它是否满足约束条件:

a[i-1] < a[i+1]

完成。

在4秒的时间限制内,我希望您可以查看大约5000万个元素的数组(400 MB数据)。

答案 1 :(得分:0)

我这里没有给你直接代码,因为这个问题来自编程领域。

如果数组长度为1,则无需删除任何元素

其他

保持flag = 0

循环1到数组的lenght-1

  1. val =array[n]- array[n-1]
  2. 如果val < 0更新flag += 1
  3. if flag > 1然后我们需要删除至少2个元素。
  4. if flag < 2然后给定的数组必须删除不超过1个元素。

    您不需要通过[:]复制数组。