Когда информация о Google для получения информации о представлении списка Python мне предложили вызов google foobar, который я медленно работал в последние несколько дней для удовольствия. Последний вызов:Способ эффективного вычисления контрольной суммы XOR (^) на основе списка идентификаторов
эффективно требует создания списка идентификаторов, игнорируя все большее число из каждой новой линии до тех пор, пока один ID слева. Затем вы должны XOR (^) идентификаторы для создания контрольной суммы. Я создал рабочую программу, которая выводит правильный ответ, однако недостаточно времени для прохождения всех тестовых случаев (пропусков 6/10) за выделенное время. Длина 50 000 должна давать результат менее чем за 20 секунд, но требуется 320.
Может ли кто-то направить меня в правильном направлении, но , пожалуйста, не делайте этого для меня, я с удовольствием подталкиваю себя с этой проблемой. Возможно, есть структура данных или алгоритм, который я могу реализовать, чтобы ускорить время вычисления?
Логика кода:
Во-первых, начиная идентификатор и длина берутся в
список идентификаторов генерируется, игнорируя все большее число идентификаторов из каждой новой линии, начиная с игнорируя 0 из первой строки.
операцию XOR всех чисел в списке IDS, используя для цикла
Ответ возвращается как INT
import timeit
def answer(start,length):
x = start
lengthmodified = length
answerlist = []
for i in range (0,lengthmodified): #Outter for loop runs an amount of times equal to the variable "length".
prestringresult = 0
templist = []
for y in range (x,x + length): #Fills list with ids for new line
templist.append(y)
for d in range (0,lengthmodified): #Ignores an id from each line, increasing by one with each line, and starting with 0 for the first
answerlist.append(templist[d])
lengthmodified -= 1
x += length
for n in answerlist: #XORs all of the numbers in the list via a loop and saves to prestringresult
prestringresult ^= n
stringresult = str(prestringresult)
answerlist = [] #Emptys list
answerlist.append(int(stringresult)) #Adds the result of XORing all of the numbers in the list to the answer list
#print(answerlist[0]) #Print statement allows value that's being returned to be checked, just uncomment it
return (answerlist[0]) #Returns Answer
#start = timeit.default_timer()
answer(17,4)
#stop = timeit.default_timer()
#print (stop - start)
У вас есть две внутренних петель. Попытайтесь и избавиться от них. – Michael