Java 具有索引和的数组值的最大绝对差

Java 具有索引和的数组值的最大绝对差,java,python,c,algorithm,data-structures,Java,Python,C,Algorithm,Data Structures,我遇到了一个问题,它是: 给你一个由N个整数组成的数组,A1,A2,…,an。返回所有1的f(i,j)的最大值≤ i、 j≤ N f(i,j)定义为| A[i]-A[j]+|i-j |,其中| x |表示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,

我遇到了一个问题,它是: 给你一个由N个整数组成的数组,A1,A2,…,an。返回所有1的f(i,j)的最大值≤ i、 j≤ N f(i,j)定义为| A[i]-A[j]+|i-j |,其中| x |表示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。我试过很多次去理解它,但我仍然不明白为什么我们要用每个值及其索引值来做负数。我需要一个简单的术语来理解它。请帮我简单地理解这个问题。我将非常感谢你

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)


我想你很清楚

Hi Hit hitokiri,谢谢你的回复。我得到了这两点| A[i]-A[j]-A[i]-A[j]和|A[i]-A[j]-A[i]你能用例子解释一下我们为什么要这样做吗?正如你在我的回答中看到的,
f(i,j)
总是等于
(A-b)
的值
A
A[i]-i
A[i]/code>(
b
是一样的)。那么,max f(i,j)=max(a)-min(b)。那么这是否意味着在求绝对值的最大差值时,我们不关心它们的符号。因此,有一次我们用值添加索引,然后求出max(min(a[i]+i)-min(a[j]+j)),另一次我们用数组值减去索引值,然后再次求出max(min(a[i]-min(a[j]-j) )因为我们需要更大的值,忽略符号,因为我们使用的是绝对差。我只是说在你的例子中,如果
f=a-b
max(f)=max(a)-min(b)
。正如我上面提到的,
f
总是等于
a-b
,所以我们计算
f(I,j)
正如您所说。不要对不同的问题应用不同的解决方案。