【问题标题】:Maximum difference between two elements is equal to solve Maximum Subarray?两个元素之间的最大差异等于解决最大子数组?
【发布时间】:2016-09-25 15:46:46
【问题描述】:

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

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

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

等于解决最大子数组问题:

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

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

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

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

我想知道为什么。

【问题讨论】:

    标签: arrays algorithm


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2013-03-27
      • 1970-01-01
      • 2014-02-15
      • 2014-11-16
      • 1970-01-01
      • 2021-11-13
      • 2020-01-31
      • 1970-01-01
      • 2012-03-08
      相关资源
      最近更新 更多