Уменьшите данный массив, заменив соседние элементы их отличием
Дан массив arr[] , состоящий из N элементов (таких, что N = 2k для некоторого k ≥ 0), задача состоит в том, чтобы уменьшить массив и найти последний оставшийся элемент после объединения всех элементов в один. Массив уменьшается, выполняя следующую операцию:
- Объединить соседние элементы, т.е. объединить элементы с индексами 0 и 1 в один, 2 и 3 в один и так далее.
- При слиянии вновь образованный элемент станет абсолютной разницей между двумя объединенными элементами.
Примеры:
Input: N = 4, arr[] = [1, 2, 3, 4]
Output: 0
Explanation: First operation:
On merging 1st and 2nd elements we will have a element with value1.
On merging 3rd and 4th elements, we will have a element with value1.
Therefore, we are left with two elements where each of them having cost 1.
Second operation:
On merging the 1st and 2nd elements we will get a new element with value 0.
This is because both elements had the same value of 1.Input: N = 1, arr[] = [20]
Output: 20
Explanation: We can’t perform any operation because performing an operation requires at least 2 elements. Hence, 20 is cost of the last remaining element
Подход: Эту проблему можно решить, используя подход «Разделяй и властвуй» .
- Создайте рекурсивную функцию.
- Базовым условием для рекурсии будет то, что если размер массива равен 1, то ответ будет единственным элементом массива в нем.
- Верните абсолютную разницу между первой половиной массива и второй половиной массива, вызвав рекурсивную функцию для обеих половин.
- Объедините обе половины и получите ответ.
Ниже приведена реализация вышеуказанного подхода:
Временная сложность: O (2 log 2 N )
Вспомогательное пространство: O(N)