在数组中,数字减去它右边的数字得到一个数对之差。

题目:

在数组中,数字减去它右边的数字得到一个数对之差。

求所有数对之差的最大值。例如在数组{ 2, 4, 1, 16, 7, 5, 11, 9 }中

数对之差的最大值是11,是16减去5的结果。


解题思路:

记原始数组为:arr[1..n]

使用一个数组记录向量两个数组之间的差值

delta[i]=arr[i]-arr[j]

delta的值依次为:

a[1]-a[2]  a[2]-a[3]   a[3]-a[4] ... a[n-1]-a[n]

则任意两个差值表示为:

a[i]-a[j]=(a[i]-a[i+1])+(a[i+1]-a[i+2])+(a[i+2]-a[i+3]) ...+(a[j-1]-a[j])

           =delta[i]+delta[i+1]+...delta[j-1]

即连续子数组和

接下来即求delta数组最大连续子数组和





标签: delta、数对、减去、arr、数组、面试
  • 回复
隐藏