
Задача в Пайтон(python) Вам дан список песен, которые до сих пор играли на радио 106 FM. Всего в
списке Содержит песни. Найти продолжительность самого длинного фрагмента песен, состоящего из неповторяющихся песен. Входные данные: В первой строке одно целое число, – количество песен, в следующей строке количество целых чисел, 1, 2, . . . , – каждой песне присваивается идентификационный номер. Выходные дпнные: Выведите длину самого длинного неповторяющегося фрагмента песни. Пример: Вход: 8 1 2 1 3 2 7 4 2 Выход: 5

Ответы на вопрос

Ответ:
# Читаем количество песен
n = int(input())
# Читаем список песен
songs = list(map(int, input().split()))
# Инициализируем максимальную длину фрагмента
max_length = 0
# Проходим по списку песен
for i in range(n):
# Инициализируем словарь для хранения песен, которые уже встретились в фрагменте
song_set = set()
# Инициализируем текущую длину фрагмента
curr_length = 0
# Проходим по списку песен с текущей позиции
for j in range(i, n):
# Если песня уже встречалась в фрагменте, то выходим из цикла
if songs[j] in song_set:
break
# Иначе добавляем песню в словарь и увеличиваем текущую длину фрагмента
song_set.add(songs[j])
curr_length += 1
# Обновляем максимальную длину фрагмента
max_length = max(max_length, curr_length)
# Выводим максимальную длину фрагмента
print(max_length)



Для решения этой задачи можно использовать следующий алгоритм:
- Создайте переменные
max_length
иcurrent_length
и установите их равными 0. - Создайте пустой словарь
visited_songs
для отслеживания посещенных песен. - Считайте количество песен из первой строки в переменную
n
. - Считайте список идентификационных номеров песен из следующей строки и сохраните его в переменную
songs
. - Итерируйтесь по списку
songs
с помощью циклаfor
, используя переменнуюsong
для каждого идентификационного номера песни. - Внутри цикла проверьте, если
song
уже присутствует в словареvisited_songs
:- Если песня уже посещалась, обновите
current_length
в 0 и очистите словарьvisited_songs
. - Если песня новая, добавьте ее в словарь
visited_songs
с ключомsong
и увеличьтеcurrent_length
на 1.
- Если песня уже посещалась, обновите
- После каждой итерации цикла обновляйте
max_length
, еслиcurrent_length
большеmax_length
. - Выведите
max_length
.
Вот реализация данного алгоритма на языке Python:
pythonn = int(input())
songs = list(map(int, input().split()))
max_length = 0
current_length = 0
visited_songs = {}
for song in songs:
if song in visited_songs:
current_length = 0
visited_songs = {}
else:
visited_songs[song] = True
current_length += 1
if current_length > max_length:
max_length = current_length
print(max_length)
При выполнении примера входных данных, указанных в вашем вопросе, код выше выведет 5
в качестве результата.


Топ вопросов за вчера в категории Информатика







Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili