Взломать интервью по кодированию (серия 6 деталей)
Это является частью ряда объяснений LeetCode и других кураторских объяснений (индекс). Если вам понравилось это решение или вы нашли его полезным, пожалуйста, нравится этот пост.
Проблема LeetCode #1027 (среда): самая длинная арифметическая последующая последовательность
Учитывая массивные числа целых чисел, верните длину самой длинной арифметической последующей последовательности в Nums.
Напомним, что последующая массива NUMS – это список Nums [i1], Nums [i2], …, Nums [ik] с 0 Пример 1: Ввод: Nums = [3,6,9,12] Вывод: 4 Объяснение: Весь массив представляет собой арифметическую последовательность с шагами. Пример 2: Ввод: Nums = [9,4,7,2,10] Вывод: 3 Объяснение: Самая длинная арифметическая подпоследовательность – [4,7,10]. Пример 3: Ввод: Nums = [20,1,15,3,10,5,8] Вывод: 4 Объяснение: Самая длинная арифметическая подпоследовательность – [20,15,10,5]. Ограничения: 2. Length 0 [i] Во время средней школы мы узнали эту концепцию с другим названием * *Арифметическая прогрессия (AP) * . Идея довольно проста. Последовательность чисел называется AP AP, если есть не менее 3 чисел, и они равноудачны друг от друга! Итак, Также вы заметили интересный факт здесь – в отсортированном списке Итак, мы знаем, как распознать AP, но как мы находим самый длинный AP, также рассмотрим эти вариации Хорошо, так что давайте возьмем один пример: Один из способов взглянуть на решение – сначала сортировать их Примечание 2,4 и 7,9 не являются действительным AP, хотя они имеют одинаковую разницу. Но для этой проблемы мы можем сказать, что она имеет длину по 2 каждый с разницей также 2. Естественно, когда мы видим проблему максимизации или минимизации, что мы хотим, чтобы сравнить все результаты и вернуть макс или мин. Нам понадобятся концепции динамического программирования здесь! Если вы видите пример выше, можем ли мы сказать, что разница в том, что это ключ, и пара (последний индекс нашей цепи и максимальной длины) является нашим значением? Зачем вам нужна пара в качестве значения? Скажи, что у нас есть еще один пример Как вы можете заметить, у нас есть такая же разница, но одна пара 14 имеет больше всего чисел Так что, если мы храним значения DP как карту карты с различием в качестве ключа – возможно, проблема не так уж и сложна! Давайте посмотрим код Как вы можете видеть, это решение не является самым сложным, мне было легче думать почти до завершения во время интервью, не зная ничего об AP заранее. Если вы возьмете на себя решение для использования какого -то двухмерного решения на основе массива – продолжайте 😄 У нас будет длина по умолчанию 2 для каждой пары!Предварительное условие
Что такое арифметическая подпоследовательность?
1 8 15
AP AS 1 (+7) 8 (+7) 15
У нас есть разница в 7, и поэтому, если бы я спросил вас, какой номер будет дальше – что бы вы сказали?1 + x 8
-> Средний номер при удвоении равен сумме его соседей! Не забывайте об этом 😉Решение
-1 2 5 8
является действительным AP5 9 1
является действительным AP = 1 5 9
5 4 9 1
имеет действительный AP Последующая последовательность -> 1 5 9
9 4 7 2 10
2 4 7 9 10
-> Вы видите последующую AP? 4 7 10
– Здесь длина 3, а разница также 3Выяснить алгоритм
1 2 14 15 16 27 29 30 43
Сколько у нас AP:
Diff [1 15 29]
Diff [1 15 29 43]
Diff [1 14 27]
Diff [2 16 30]
1 15 29 43
Реализация
public int longestArithSeqLength(int[] nums) {
int size = nums.length;
// Stores the length of sequences having same difference
Map
Анализ
итерация
итерация
итерация
итерация
Взломать интервью по кодированию (серия 6 деталей)
Оригинал: “https://dev.to/saurabhpro/leetcode-longest-arithmetic-subsequence-4jal”