Время ожидания кода Python HackerRank Bonetrousle
Я работаю над проблемой Bonetrousle в ранжировании хакеров, используя python. Через много часов приведенный ниже код передает все тестовые примеры, кроме одного, где он истекает. Любые предложения о том, как я могу сделать код быстрее, будут оценены. Я считаю, что проблема заключается в коде, который имеет дело с остатком, я помещаю комментарии ниже и выше, поэтому его легко найти. К сожалению, я не понимаю, как его реорганизовать, чтобы он работал быстрее.
Код, который я написал, дает правильный ответ для всех тестовых примеров, я проверил это в pycharm. Единственная проблема заключается в том, что он должен замедляться для одного из тестов теста хакерских рангов.
Вот ссылка на проблему https://www.hackerrank.com/challenges/bonetrousle
Вот ссылка на тестовый пример: https://hr-testcases-us-east-1.s3.amazonaws.com/21649/input12.txt?AWSAccessKeyId=AKIAJAMR4KJHHUS76CYQ&Expires=1473987910&Signature=xaHGvYRVmUVJHh4r3on%2BWgoIsjs%3D&response-content- тип = текст% 2Fplain
firstLine = int(input()) for a in range(0, firstLine): nums = input() numsArr = list(map(int, nums.split(" "))) n = numsArr[0] k = numsArr[1] b = numsArr[2] num1 = 0 rem = 0 answer = True remAdded = False count = 0 boxArr = [] for i in range(1, b+1): count += i boxArr.append(i) num1 = (n - count)//b rem = (n - count)%b for j in range(0, len(boxArr)): boxArr[j] = boxArr[j] + num1 if boxArr[j] > k: answer = False # In below code -> if there is a remainder I am adding it to an element in the array that has box numbers # I check to see if I can add the remainder to an element in the array #without that element exceeding k, the number of sticks. If I can't then the bool remAdded doesn't get set to True # The below code works but it seems inefficient and looks like the problem if rem == 0: remAdded = True elif answer != False: for r in range(len(boxArr) - 1, 0, -1): if boxArr[r] + rem <= k and r == len(boxArr) - 1: boxArr[r] = boxArr[r] + rem remAdded = True break else: if boxArr[r] + rem <= k and (boxArr[r] + rem) not in boxArr: boxArr[r] = boxArr[r] + rem remAdded = True break # above is code for dealing with remainder. Might be the problem if answer == False or remAdded == False: print(-1) elif 0 in boxArr: print(-1) else: for z in range(0, len(boxArr)): if z != len(boxArr) - 1: print(boxArr[z], end =" ") else: print(boxArr[z])
- Аранжировка букв самым выразительным способом?
- Как точно решить квадратичные уравнения с большими целыми коэффициентами (по целым числам)?
- перенастроить задачу для минимального времени выполнения
- Использовать шаблон для построения хеш-алгоритма md5
- Планирование маршрута для нескольких роботов одновременно
Замените код между комментариями:
if rem == 0: remAdded = True elif boxArr[-1] + 1 > k: remAdded = False elif answer != False: l = len(boxArr)-1 for r in range(l, l-rem, -1): boxArr[r] += 1 remAdded = True
Это избавляет от дорогого (boxArr[r] + rem) not in boxArr
, в основном. Он передает мне все тестовые примеры.
- Оптимизация Keras для использования всех доступных ресурсов процессора
- Можно создать разделяемую память после разветвления при многопроцессорности python?
- Элемент большинства Python
- Как создать список всех возможных кортежей из этой таблицы?
- Генерация серого кода.
- Тип данных Распознавание / Угадание данных CSV в python
- Какой код python генерирует все возможные группировки (деревья) для двоичных операторов
- сложность пути (самый быстрый маршрут) до любого заданного числа в python
- Как сделать цветопередачу из цветовой палитры
- SPOJ Следующий палиндром
- Как уменьшить палитру изображений до определенных цветов?