Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 拆分数组并找到最大| max(L)-max(R)|_Arrays_Algorithm - Fatal编程技术网

Arrays 拆分数组并找到最大| max(L)-max(R)|

Arrays 拆分数组并找到最大| max(L)-max(R)|,arrays,algorithm,Arrays,Algorithm,我有一个关于编程的一般性问题。 假设我有一个数组,我需要找到把数组分成两部分的索引K,这样值 |max(L)-max(R)|是最大的 最大值(L)是L部分中的最大值 K指向R中的第一个成员 您可以通过一些准备工作在O(n)中解决它: 将两个数组,maxL[]和maxR[]的大小与原始数组相同 从左侧开始遍历原始数组,将maxL[i]设置为到目前为止的最大值 从右侧开始再次遍历原始数组,将maxR[i]设置为到目前为止的最大值 现在在任何方向上行走maxL[]和maxR[],寻找k,使ABS(

我有一个关于编程的一般性问题。 假设我有一个数组,我需要找到把数组分成两部分的索引K,这样值 |max(L)-max(R)|是最大的

  • 最大值(L)是L部分中的最大值
  • K指向R中的第一个成员
您可以通过一些准备工作在O(n)中解决它:

  • 将两个数组,
    maxL[]
    maxR[]
    的大小与原始数组相同
  • 从左侧开始遍历原始数组,将
    maxL[i]
    设置为到目前为止的最大值
  • 从右侧开始再次遍历原始数组,将
    maxR[i]
    设置为到目前为止的最大值
  • 现在在任何方向上行走
    maxL[]
    maxR[]
    ,寻找
    k
    ,使
    ABS(maxL[k]-maxR[k])
    的值最大化;返回
    k

这似乎是一个问题,一个解决方案只有两个可行的候选值:要么K将第一个值从其余值中分离出来,要么将最后一个值从其余值中分离出来,只给出一个值的一小部分,而剩下的值(包括最大值)则包含很大一部分

假设数组中的最大值可以在索引M处找到,那么两部分中的一部分将具有该值,它将是Max(Part)。另一部分的最大值应尽可能小。因此,该部分应仅减少一个值:向该部分增加一个值永远不会减少其最大值

如果总的最大值在数组的一端,那么就别无选择,小部分将在数组的另一端被切掉


当总最大值不在数组的末尾时,有两种可能性:选择截断值最低的一种。换句话说,K将是1或n-1(在基于零的索引中),这可以在恒定时间内确定,即O(1)。

实际上,要解决这个问题,我们可以在恒定时间内完成

1.由于列表必须一分为二,列表A或列表B将包含最左边或最右边的元素

  • 向列表中添加值只能增加列表的最大元素数,因此永远不希望列表的大小大于1
  • 所以我们需要做的就是看头部和尾部,取最小的A,然后把剩下的B列出来

    例如考虑6、7、7、3、2、6、4


    A=[4],(最小的头/尾),B=[6,7,7,3,2,6]

    尝试插值看起来答案总是k=2或k=n-2,对吗?请注意,在这种方法的实际实现中,您实际上不会显式构建两个数组,因为您可以在检查
    ABS(maxL[k]的同一过程中动态计算另一个数组的值-maxR[k])
    @user8446864对。毕竟,这似乎不是一个非常有趣的编程问题,只是一个与编程相关的难题。找到一个绝对差异最小的分割听起来像是一个更有趣的问题。@ruakh对,这是一个有效的优化。事实证明这也是不必要的,因为这个问题有一个O(1)解。找到相同函数的
    min
    可能会更有趣。我想我是第一个发布此解决方案的人,但在找到它方面做得很好:)