На следующей неделе у меня будет задача по кодированию в качестве первого раунда собеседования. HR сказал, что они будут использовать Codility в качестве платформы для задач кодирования. Я практикуюсь по Урокам бодрствования.
Моя проблема в том, что я часто получаю очень высокие баллы за правильность, но моя оценка производительности, которая измеряет временную сложность, ужасна (я часто получаю 0%).
Вот вопрос: https://app.codility.com/programmers/lessons/5-prefix_sums / pass_cars /
Мой код:
def solution(A):
N = len(A)
my_list = []
count = 0
for i in range(N):
if A[i] == 1:
continue
else:
my_list = A[i + 1:]
count = count + sum(my_list)
print(count)
return count
Предполагается, что это O (N), но у меня O (N ** 2).
Как кто-то может подойти к этому вопросу, чтобы решить его при временной сложности O (N)?
В общем, когда вы смотрите на вопрос об алгоритме, как вы можете найти подход?
2 ответа
Вы не должны суммировать весь массив каждый раз, когда найдете ноль. Это составляет O (n ^ 2). Вместо этого обратите внимание, что каждый найденный ноль даст +1 для каждого следующего:
def solution(A):
zeros = 0
passing = 0
for i in A:
if i == 0:
zeros += 1
else:
passing += zeros
return passing
Вы можете проверить все решения codility, а также пример проезжающих автомобилей.
Не забывайте лимит в 1000000000.
def solution(a):
pc=0
fz=0
for e in a:
if pc>1000000000:
return -1
if e==0:
fz+=1
else:
pc+=fz
return pc
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.