Форум сайта python.su
Доброго времени суток
В качестве практики решаю задачки на питонтьютор, и попалась следующая:
Последовательность состоит из натуральных чисел и завершается числом 0. Определите, сколько элементов этой последовательности равны ее наибольшему элементу.
Для решения данной задачи написал код, он работает, но что-то мне подсказывает, что сделал все не через то место, и он должен быть существенно короче, если подскажете, в чем я ошибся, то буду премного благодарен.
Ссылка на задачу
n = int(input()) x = 0 #maximum y = 1 #schet while n != 0: if x<n: x=n if y<n: y=1 #obnulyaet schet elif n == x and not x>n: y+=1 n = int(input()) print(y)
Отредактировано Sanya9652 (Ноя. 5, 2020 08:42:59)
Офлайн
Sanya9652Он у тебя даже неправильно реализует алгоритм
но что-то мне подсказывает, что сделал все не через то место, и он должен быть существенно короче
>>> def f(): ... n = int(input()) ... x = 0 #maximum ... y = 1 #schet ... while n != 0: ... if x<n: ... x=n ... if y<n: ... y=1 #obnulyaet schet ... elif n == x and not x>n: ... y+=1 ... n = int(input()) ... ... print(y) ... >>> f() 1 1 1 2 2 0 4 >>>
Отредактировано py.user.next (Ноя. 5, 2020 12:26:10)
Офлайн
А слабо, собрать входные данные в список, отсортировать его реверсивно и, в цикле, посчитать сколько элементов равны певому элементу списка?
Офлайн
RafikСделай, конечно, так, чтобы чисто лучше питон узнать. Но это алгоритмически неправильно. Во-первых, данные нужно стараться обрабатывать так, будто они поступают бесконечно (это могут быть датчики, огромные массивы данных и тому подобное), поэтому нужно стараться не собирать данные никуда, а обрабатывать их на лету, иначе не хватит памяти и время выполнения будет удлинняться. Во-вторых, ты предложил отсортировать все данные, хотя в них может быть, например, миллиард единиц и двоек и одно число сто. Зачем сортировать этот миллиард элементов? Достаточно число сто получить через линейную функцию max(), а потом считать его количество такой же линейной функцией. При этом миллиард единиц и двоек остаются нетронутыми на своих местах и, соответственно, на них не тратится время на сравнения и перемещения.
А слабо, собрать входные данные в список, отсортировать его реверсивно и, в цикле, посчитать сколько элементов равны певому элементу списка?
Отредактировано py.user.next (Ноя. 5, 2020 23:35:03)
Офлайн