#python #python_3x #инспекция_кода #комбинаторика #сложность
И вновь всех приветствую. Решил очередную задачу на контесте способом, который показался мне интересным. Т.к. я новичок, еще не совсем понимаю как определять О(n), поэтому прошу помощи в этом вопросе. Собственно, вот сама задача: На вход программы поступает последовательность из N целых положительных чисел. Рассматриваются все пары различных элементов последовательности (элементы пары не обязаны стоять в последовательности рядом, порядок элементов в паре неважен). Необходимо определить количество пар, сумма чисел и разность индексов которых кратна 3. И мое решение: n = int(input()) summ = 0 r = [[0] * 3 for i in range(3)] for i in range(n): s = int(input()) r[i % 3][s % 3] += 1 print((r[0][0] * (r[0][0] - 1) + r[1][0] * (r[1][0] - 1) + r[2][0] * (r[2][0] - 1))//2 + r[0][1] * r[0][2] + r[1][1] * r[1][2] + r[2][1] * r[2][2]) Проверку на контесте прошла, результат - задача решена верно.
Ответы
Ответ 1
Решение отличное, сложность линейная от размера ввода В цикле выполняется k*n операций, где k - константа, так что его сложность O(n) Начальные строчки выполняются за константное время O(1), финальная тоже, итого O(n + 1 + 1) = O(n)
Комментариев нет:
Отправить комментарий