Максимальное значение arr[i] + arr[j] + i – j для любой пары массива

Опубликовано: 23 Сентября, 2022

Дан массив arr[] , состоящий из N целых чисел, задача состоит в том, чтобы найти максимальное значение (arr[i] + arr[j] + i − j) для любой возможной пары (i, j) данного массива.

Примеры:

Input: arr[] = {1, 9, 3, 6, 5}
Output: 13
Explanation:
The pair of the array having the maximum value of (arr[i] + arr[j] + i − j) is (1, 3). The value is (arr[1] + arr[3] + 1 – 3) = (9 + 6 + 1 – 3) = 13. 

Input: arr[] = {6, 2, 5, 6}
Output: 10

Наивный подход: самый простой подход к решению данной проблемы — сгенерировать все возможные пары (i, j) заданного массива и найти максимальное значение выражения среди всех возможных пар.

Ниже приведена реализация вышеуказанного подхода:

Временная сложность: O(N 2 )
Вспомогательное пространство: O(1)

Эффективный подход. Описанный выше подход также можно оптимизировать, разбив выражение (arr[i] + arr[j] + i – j) на две части: (arr[i] + i) и (arr[j] – j) а затем максимизируйте сумму максимального значения (arr[i] + i) со всеми возможными значениями (arr[i] – i) . Выполните следующие шаги, чтобы решить проблему:

  • Инициализируйте две переменные: res со значением 0 для хранения требуемой суммы и maxValue с arr[0] для отслеживания максимального значения (arr[i] + i) .
  • Пройдите по заданному массиву arr[] в диапазоне [1, N – 1], используя переменную i , и выполните следующие шаги:
    • Сохраните значение выражения в X как (maxValue + arr[i] – i) .
    • Если значение X больше, чем res , то обновите значение res до X.
    • Если значение arr[i] + i больше, чем maxValue , обновите maxValue до (arr[i] + i) .
  • После выполнения вышеуказанных шагов выведите в качестве результата значение res .

Ниже приведена реализация вышеуказанного подхода:

Временная сложность: O(N)
Вспомогательное пространство: O(1)

РЕКОМЕНДУЕМЫЕ СТАТЬИ