Чтение онлайн

на главную - закладки

Жанры

Решаем задачи Python
Шрифт:

– После заполнения списка `lengths` находим максимальное значение в этом списке, которое будет длиной наибольшей невозрастающей подпоследовательности.

5. Восстановление подпоследовательности:

– Для восстановления самой подпоследовательности начиная с элемента с максимальной длиной, мы просматриваем элементы списка в обратном порядке, начиная с конечного элемента с максимальной длиной. Мы добавляем элемент в подпоследовательность, если он больше или равен предыдущему элементу и длина подпоследовательности, заканчивающейся в этом элементе, на 1 меньше текущей максимальной

длины. Это позволяет нам найти и восстановить исходную подпоследовательность.

6. Возвращение результатов:

– Возвращаем найденную подпоследовательность, которая является наибольшей невозрастающей подпоследовательностью исходного списка `nums`.

14. Задача поиска наибольшей невозрастающей подпоследовательности в массиве чисел, но с ограничением на разницу между элементами этой подпоследовательности.

Например, нам нужно найти наибольшую невозрастающую подпоследовательность, где разница между соседними элементами не превышает заданное число `k`.

Мы можем использовать модифицированный подход динамического программирования для решения этой задачи. Примерный алгоритм:

1. Создаем список длиной равной длине исходного массива чисел, заполненный единицами. Этот список будет содержать длины наибольших невозрастающих подпоследовательностей, заканчивающихся в каждом элементе исходного массива.

2. Проходим по каждому элементу исходного массива и сравниваем его со всеми предыдущими элементами.

3. Если разница между текущим элементом и предыдущим не превышает `k`, то длина наибольшей невозрастающей подпоследовательности, заканчивающейся в текущем элементе, будет равна максимальной длине подпоследовательности, заканчивающейся в предыдущем элементе, плюс 1.

4. В конце алгоритма находим максимальное значение в списке длин и восстанавливаем саму подпоследовательность.

Давайте реализуем этот алгоритм на Python:

```python

def find_max_non_increasing_subsequence_with_limit(nums, k):

n = len(nums)

# Создаем список для хранения длин наибольших невозрастающих подпоследовательностей

lengths = [1] * n

# Заполняем список длин

for i in range(1, n):

for j in range(i):

if nums[i] <= nums[j] and nums[j] – nums[i] <= k:

lengths[i] = max(lengths[i], lengths[j] + 1)

# Находим максимальную длину подпоследовательности

max_length = max(lengths)

# Восстанавливаем саму подпоследовательность

subsequence = []

last_index = lengths.index(max_length)

subsequence.append(nums[last_index])

for i in range(last_index – 1, -1, -1):

if nums[last_index] – nums[i] <= k and lengths[i] == max_length – 1:

subsequence.append(nums[i])

max_length -= 1

last_index = i

return subsequence[::-1] # Возвращаем подпоследовательность в обратном порядке

# Пример использования

nums = [5, 3, 8, 2, 9, 1, 6]

k = 3

result = find_max_non_increasing_subsequence_with_limit(nums, k)

print("Наибольшая невозрастающая подпоследовательность

с разницей не более", k, ":", result)

```

Этот код найдет и выведет наибольшую невозрастающую подпоследовательность в списке чисел `[5, 3, 8, 2, 9, 1, 6]`, где разница между соседними элементами не превышает 3.

Работа с текстом и данными

Пояснения к коду:

1. Определение функции `find_max_non_increasing_subsequence_with_limit`:

– Эта функция принимает список чисел `nums` и число `k`, которое ограничивает разницу между соседними элементами подпоследовательности. Она возвращает наибольшую невозрастающую подпоследовательность с разницей между соседними элементами не более `k`.

2. Создание списка длин подпоследовательностей:

– В начале функции создается список `lengths` длиной, равной длине исходного списка `nums`, заполненный единицами. Этот список будет содержать длины наибольших невозрастающих подпоследовательностей, заканчивающихся в каждом элементе исходного списка.

3. Заполнение списка длин:

– Далее происходит двойной цикл, где для каждого элемента `nums[i]` проверяется, какой максимальной длины может быть наибольшая невозрастающая подпоследовательность, заканчивающаяся в этом элементе и удовлетворяющая ограничению на разницу между соседними элементами. Это делается путем сравнения элемента `nums[i]` с каждым предыдущим элементом `nums[j]` (где `j < i`). Если разница между `nums[i]` и `nums[j]` не превышает `k`, и `nums[i]` меньше или равен `nums[j]`, то длина подпоследовательности, заканчивающейся в `nums[i]`, увеличивается на 1.

4. Нахождение максимальной длины:

– После заполнения списка `lengths` находим максимальное значение в этом списке, которое будет длиной наибольшей невозрастающей подпоследовательности с ограничением на разницу между соседними элементами.

5. Восстановление подпоследовательности:

– Для восстановления самой подпоследовательности начиная с элемента с максимальной длиной, мы просматриваем элементы списка в обратном порядке, начиная с конечного элемента с максимальной длиной. Мы добавляем элемент в подпоследовательность, если разница между текущим элементом и последним добавленным не превышает `k`, и длина подпоследовательности, заканчивающейся в этом элементе, на 1 меньше текущей максимальной длины. Это позволяет нам найти и восстановить исходную подпоследовательность.

6. Возвращение результатов:

– Возвращаем найденную подпоследовательность, которая является наибольшей невозрастающей подпоследовательностью с ограничением на разницу между соседними элементами.

15. Задача о генерации паролей: Написать программу для генерации случайных паролей с заданными требованиями к сложности.

Для генерации случайных паролей с заданными требованиями к сложности, такими как длина пароля, использование различных типов символов (буквы верхнего и нижнего регистра, цифры, специальные символы), мы можем создать программу на Python, используя модуль `random` для генерации случайных символов.

Поделиться:
Популярные книги

Газлайтер. Том 19

Володин Григорий Григорьевич
19. История Телепата
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Газлайтер. Том 19

Проклятый Лекарь

Молотов Виктор
1. Анатомия Тьмы
Фантастика:
фэнтези
5.00
рейтинг книги
Проклятый Лекарь

Герой

Бубела Олег Николаевич
4. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.26
рейтинг книги
Герой

Сын счастья

Вассму Хербьёрг
2. Книга Дины
Проза:
современная проза
5.00
рейтинг книги
Сын счастья

Неучтенный элемент. Том 9

NikL
9. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 9

Стражи душ

Кас Маркус
4. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Стражи душ

Пращуры русичей

Жоголь Сергей
Проза:
историческая проза
6.00
рейтинг книги
Пращуры русичей

Развод в 45. От любви до ненависти

Гофман Крис
6. Развод
Любовные романы:
остросюжетные любовные романы
5.40
рейтинг книги
Развод в 45. От любви до ненависти

Геном хищника. Книга седьмая

Гарцевич Евгений Александрович
7. Я - Легенда!
Фантастика:
боевая фантастика
рпг
фэнтези
попаданцы
5.00
рейтинг книги
Геном хищника. Книга седьмая

Личный аптекарь императора. Том 4

Карелин Сергей Витальевич
4. Личный аптекарь императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Личный аптекарь императора. Том 4

Двойник Короля 7

Скабер Артемий
7. Двойник Короля
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Двойник Короля 7

Натиск

Осадчук Алексей Витальевич
12. Последняя жизнь
Фантастика:
аниме
фэнтези
попаданцы
6.20
рейтинг книги
Натиск

Газлайтер. Том 5

Володин Григорий
5. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 5

Геном хищника. Книга девятая

Гарцевич Евгений Александрович
9. Я - Легенда!
Фантастика:
боевая фантастика
рпг
попаданцы
5.00
рейтинг книги
Геном хищника. Книга девятая