Для данного массива arr [0… n-1], содержащего n натуральных чисел, подпоследовательность arr [] называется Bitonic, если она сначала увеличивается, а затем уменьшается. Напишите функцию, которая принимает массив в качестве аргумента и возвращает длину самой длинной битовой подпоследовательности.
Последовательность, отсортированная по возрастанию, считается битовой, а убывающая часть — пустой. Аналогично, последовательность убывающих порядков считается битовой, а возрастающая часть — пустой.
Примеры:
Input arr[] = {1, 11, 2, 10, 4, 5, 2, 1}; Output: 6 (A Longest Bitonic Subsequence of length 6 is 1, 2, 10, 4, 2, 1) Input arr[] = {12, 11, 40, 5, 3, 1} Output: 5 (A Longest Bitonic Subsequence of length 5 is 12, 11, 5, 3, 1) Input arr[] = {80, 60, 30, 40, 20, 10} Output: 5 (A Longest Bitonic Subsequence of length 5 is 80, 60, 30, 20, 10)
Источник: Microsoft Интервью Вопрос
Решение
Эта проблема представляет собой вариант стандартной задачи с наибольшей возрастающей подпоследовательностью (LIS) . Пусть входной массив будет arr [] длины n. Нам нужно построить два массива lis [] и lds [], используя динамическое программирование для решения задачи LIS . lis [i] хранит длину самой длинной увеличивающейся подпоследовательности, заканчивающейся на arr [i]. lds [i] хранит длину самой длинной убывающей подпоследовательности, начиная с arr [i]. Наконец, нам нужно вернуть максимальное значение lis [i] + lds [i] — 1, где i от 0 до n-1.
Ниже приведена реализация вышеупомянутого решения динамического программирования.
|
Джава
|
питон
|
C #
|
PHP
|
Выход:
Length of LBS is 7
Сложность времени: O (n ^ 2)
Вспомогательное пространство: O (n)
Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Рекомендуемые посты:
- Самая длинная битонная подпоследовательность в O (n log n)
- Печать самой длинной битовой подпоследовательности
- Самая длинная возрастающая подпоследовательность с использованием алгоритма самой длинной общей подпоследовательности
- Найдите самую длинную битонную последовательность так, чтобы увеличивающиеся и уменьшающиеся части были из двух разных массивов
- Самая длинная подпоследовательность, такая, что каждый элемент в подпоследовательности формируется путем умножения предыдущего элемента на простое число
- Найти битоническую точку в заданной битовой последовательности
- Самая длинная подпоследовательность с заданным значением AND | НА)
- Самая длинная подпоследовательность с заданным значением AND
- Самая длинная зигзагообразная подпоследовательность
- Самая длинная подпоследовательность без 0 после 1
- Самая длинная разделяющая подпоследовательность
- Самая длинная чередующаяся подпоследовательность
- Самая длинная подпоследовательность, среднее значение которой меньше K
- Самая длинная возрастающая подпоследовательность с использованием BIT
- Самая длинная убывающая подпоследовательность
0.00 (0%) 0 votes