Как оптимизировать код для ускорения работы в python? - PullRequest
0 голосов
/ 03 ноября 2019

Я написал некоторый код для решения проблемы, но, к сожалению, проблема имеет ограничение по времени (1 секунда), и моя программа не может решить ее в течение 1 секунды. Что-нибудь нужно сделать, чтобы сделать это быстрее? Это тест, который имеет некоторые события (q) и несколько массивов (n). Формат первого ввода 'nq', чтобы определить n и q. Тогда у нас есть «q» других входных данных в качестве одного из этих двух форматов: 1) «1 f»: добавляет число «f» ко всем массивам 2) «2 de»: удаляет первые «e» числа «d»Массив th Вывод программы должен быть суммой удаленных чисел для каждого события удаления. Когда мой код будет скомпилирован на этом сайте, появится сообщение «Превышен лимит времени». Может быть, есть другой способ ответить на этот вопрос. Мне просто интересно об этом.

def inputs(): 
    x = input() 
    y = x.split() 
    return y

def main(): 
    b = inputs()  # get two numbers with a space between them
    n = int(b[0]) 
    q = int(b[1]) 
    t = [] 
    l = 0
    obj = [[] for j in range(n)]  
    for i in range(q) : 
        b = inputs()  # get two or three numbers
        ib0 = int(b[0])
        ib1 = int(b[1])
        if ib0 == 1 : 
            for j in range(n) :
                obj[j].append(ib1)  
        if ib0 == 2 :
            ib2 = int(b[2]) 
            t.append(0)  
            for k in range(0,ib2) : 
                t[l] += obj[ib1-1][k] 
            l = l + 1
            del obj[ib1-1][:ib2] 
        b.clear()
    for m in range(l): 
        print(t[m])

if __name__ == '__main__' : 
    main() 

1 Ответ

0 голосов
/ 06 ноября 2019

Я не уверен, что это поможет, поскольку это не меняет сложность времени, но вот некоторые постоянные оптимизации (хотя я их не тестировал):

import sys
input = sys.stdin.readline  # faster input

def inputs(): 
    return input().split()

def main(): 
    b = inputs()
    n = int(b[0])
    q = int(b[1])
    l = 0
    obj = [[] for j in range(n)]
    for i in range(q) :
        b = inputs()
        ib0 = int(b[0])
        ib1 = int(b[1])
        if ib0 == 1 : 
            for j in range(n) :
                obj[j].append(ib1)
        if ib0 == 2 :
            ib2 = int(b[2]) 
            print(sum(obj[ib1-1][:ib2])) # built-in sum function + in-place print
            del obj[ib1-1][:ib2] 

if __name__ == '__main__' : 
    main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...