在一本书(算法导论,但我不记得哪一章)中我学会了解决两个元素之间的最大差异问题:
两个元素之间的最大差异使得元素更大 出现在较小的数字之后。
示例:如果数组为[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的区别;等
我想知道为什么。
答案 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