提高阵列操作的性能

时间:2020-05-10 15:42:08

标签: python arrays performance optimization

我正在尝试解决this上的codechef问题陈述。 简而言之,问题陈述是: 每次“ q”次更新数组后,找出带有“ n”个元素的数组的值(即将出现的解释)。

数组的

值表示数组连续元素的绝对差之和。 例如

array = [1,2,3,4,5]

value(array) = abs(1-2) + abs(2-3) + ... + abs(4-5)

我正在学习python(第三天),并尝试使用以下python代码解决问题。

def update(arr,find,replace):
    for i in range(len(arr)):
        if arr[i]==find:
            arr[i]=replace

def value(arr):
    sum = 0
    for i in range(len(arr)-1):
        sum = sum + abs(arr[i]-arr[i+1])
    return sum

test_case = int(input())
while test_case > 0 :
    n,q = map(int,input().split(" "))
    array = list(map(int,input().split()))
    for i in range(q):
        x,y = map(int,input().split(" "))
        update(array,x,y)
        print(value(array))
    test_case -= 1

当我在计算机上运行该代码时,对于自定义测试用例(即使输入很大)也能产生正确的结果,但是在现场却超过了时间限制。有什么方法可以优化代码以使其适合给定的约束...时间复杂度:<2秒,大小:50000bytes?

1 个答案:

答案 0 :(得分:1)

两次潜在加速(未测试):

def value(arr):
    return sum(abs(arr[i]-arr[i+1]) for i in range(len(arr)-1))

# in general, avoid using built-in names for variable names also...

并且:

def update(arr,find,replace):
    for i in range(arr.count(find)):
       arr[arr.index(find)]=replace

# find the specific replacements and replace vs 
# iterating the entire list

在Python中:

  1. 内置函数通常比您自己编写的函数快;
  2. 理解通常比传统的for循环快;
  3. 查找特定替换项比循环遍历整个列表要快。