两个元素之间的最大差异等于解决最大子阵列?

时间:2016-09-25 15:46:47

标签: arrays algorithm

在一本书(算法导论,但我不记得哪一章)中我学会了解决两个元素之间的最大差异问题:

  

两个元素之间的最大差异使得元素更大   出现在较小的数字之后。

     

示例:如果数组为[2,3,10,6,4,8,1]则返回值   应该是8(在10和2之间的差异)。如果数组是[7,9,5,6,3,2]   那么返回的值应该是2(7到9之间的差异)

等于解决最大子阵列问题:

  

在数组中找到连续的子数组(至少包含一个   数量)具有最大的总和。

     

例如,给定数组[-2,1,-3,4,-1,2,1,-5,4],连续   子阵列[4,-1,2,1]的最大和= 6。

为了解决两个元素之间的最大差异问题 [2,3,10,6,4,8,1],它可以转换为数组的 max子数组问题

[1,7,-4,-2,4,-7]其中1是2,3之间的差异; 7是3,10的区别;等

我想知道为什么。

1 个答案:

答案 0 :(得分:1)

让我们假设数组A的最大差异在元素A[i]A[j]之间,并且等于diff

diff = A[j] - A[i]           (j > i)

让我们假设在A[i][j]之间有N个元素。
您还可以通过以下方式获取值diff

diff = (A[j]-A[j-1]) + (A[j-1]-A[j-2]) + ... + (A[i+2]-A[i+1]) + (A[i+1]-A[i])

正如您可能已经看到的,每个(A[*]-A[*-1])代表差异数组中的一个元素。这意味着具有最大总和的子阵列等于每两个元素之间的最大差异。

一般来说:
让我们将B定义为A的差异数组 当A[i]

时,对于每两个元素A[j]j>i
A[j]-A[i]  =  B[i] + ... + B[j-1]  =  sum(B[k]) 
                                      for k=i to j-1