Максимальная абсолютная разница значений массива с суммой индекса - PullRequest
0 голосов
/ 01 апреля 2020

Я попал в проблему, и это: Вам дан массив из N целых чисел, A1, A2,…, AN. Возвращаемое максимальное значение f (i, j) для всех 1 ≤ i, j ≤ N. f (i, j) определяется как | A [i] - A [j] | + | i - j |, где | x | обозначает абсолютное значение х. Например,

A=[1, 3, -1]
f(1, 1) = f(2, 2) = f(3, 3) = 0
f(1, 2) = f(2, 1) = |1 - 3| + |1 - 2| = 3
f(1, 3) = f(3, 1) = |1 - (-1)| + |1 - 3| = 4
f(2, 3) = f(3, 2) = |3 - (-1)| + |2 - 3| = 5
So, we return 5. I have searched for the efficient solution to this problem and that is:

def maxDistance(array):
    # max and min variables as described
    # in algorithm.
    max1 = -2147483648
    min1 = +2147483647
    max2 = -2147483648
    min2 = +2147483647
    for i in range(len(array)):
        # Updating max and min variables
        # as described in algorithm.
        max1 = max(max1, array[i] + i)
        max2 = max(max2, array[i] - i)
        min1 = min(min1, array[i] + i)
        min2 = min(min2, array[i] - i)
    return max(max1 - min1, max2 - min2)

Теперь мой вопрос заключается в том, почему мы делаем [i] -i для каждого значения в массиве. Я пытался понять это много раз, но все еще не мог понять, почему мы делаем минус с каждым значением с его значением индекса. Мне нужен простой термин, чтобы понять это. Пожалуйста, помогите мне, ребята, понять эту проблему в простом выражении. Я буду очень благодарен вам.

1 Ответ

1 голос
/ 01 апреля 2020
if (A[i] > A[j])
   |A[i] - A[j]| = A[i] - A[j];
else
   |A[i] - A[j]| = A[j] - A[i];

if (i > j)
   |i - j| = i - j;
else
    |i - j| = j - i;

==> f(i, j) = (A[i] - A[j] + i - j) || ( A[i] - A[j] + j - i) || (A[j] - A[i] + i - j) ||( A[j] - A[i] + j - i)
==> f(i, j) = (A[i] + i) - (A[j] + j) || (A[i] - i) - (A[j] - j) || (A[j] - j) - (A[i] - i) || (A[j] + j) - (A[i] + i)

Я думаю, тебе понятно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...