我正在尝试解决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?
答案 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中:
for
循环快;