当前位置: 首页 > 知识库问答 >
问题:

两元素间的最大差等于解最大子阵?

齐乐逸
2023-03-14

在一本书(算法导论,但我不记得是哪一章)中,我学到了求解两元素间最大差值问题:

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

查找数组(至少包含一个数字)中和最大的相邻子数组。

例如,给定数组[-2,1,-3,4,-1,2,1,-5,4],相邻子数组[4,-1,2,1]的最大和=6。

为了解决[2,3,10,6,4,8,1]的两元素间最大差异问题,可以将其转化为数组的最大子数组问题:

我在想为什么。

共有1个答案

锺离明煦
2023-03-14

假设数组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]j>i:

A[j]-A[i]  =  B[i] + ... + B[j-1]  =  sum(B[k]) 
                                      for k=i to j-1
 类似资料:
  • 我实现了c程序,可以找到矩阵的元素:行的最大元素,同时列的最小元素,或行的-min元素,同时列的最大元素。例如,我们有数据。包含以下内容的txt文件: 4 7 8 9 10 6 5 4 11 5 0 1 12 4 2 7 13- 其中4是n-矩阵大小(4x4),7和10是这些数字。 下面是代码: 问题:我想知道我的代码是不是“脏”代码?因为我总是渴望让一切变得如此困难,只要有可能让它变得容易。是否

  • 我试图解决这个问题:https://www.hackerrank.com/contests/projecteuler/challenges/euler003/submissions/code/2977447 13195的质因数是5、7、13、29。 给定数N的最大素因子是什么? 输入格式第一行包含T,测试用例数。后面是T行,每行包含一个整数N。 每个测试用例的输出格式,显示N的最大素因子。 约束条

  • 给定一个数组arr,求最大abs(i-j),使abs(arr[i]-arr[j]) 经过深思熟虑,我想出了以下算法, 对于每个元素的排序,我们进行二进制搜索的复杂性是O(log n),,。总体时间复杂度为O(nlogn*2*logn),是渐近的O(nlogn)。 这种方法正确吗?是否有可能制定线性时间解决方案?我尝试使用哈希图,但发现很难得出线性解决方案。

  • 给定一个有N个整数的数组A,我们需要找到子数组的最高和,使得每个元素小于或等于给定的整数X 示例:设 N=8 且数组为 [3 2 2 3 1 1 1 3] 。现在,如果 x=2,那么如果我们考虑 1 个基本索引,则通过求和 A[2] A[3] 来回答 4。如何在 O(N) 或 O(N*logN) 中执行此问题 目前,我通过检查每个可能的子阵列来采用O(N^2)方法。如何降低复杂性?

  • 给定任何自然数数组,例如:[2,1,2,3]查找数组是否可以转换为Max数组(打印-“是”)或如果不能(打印-“否”) 使其成为最大数组 - 将数组的每个元素转换为等于其最大元素。在上面的例子中,它将是[3,3,3,3],但是通过遵循这些规则 - 一次将任何两个元素增加1(正好是2个元素。不能一次增加一个或多个元素) 多次执行此操作,直到将每个元素转换为最大元素(如果可能,请打印“YES”,否则打