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

如何找到给定数组的最大跨度?

董桐
2023-03-14

我试图解决的问题如下:我想在给定的数组中找到一个最大的数字跨度,该数组由正整数和负整数组成,返回最大值(a[j]-a[I]),这样1

  1. 求数组的n阶统计量的索引,使其为“i”

这个算法是O(nlogn),但我不知道它是否正确。

共有2个答案

昌乐生
2023-03-14

这是一个O(n)算法。

  1. 构建一个数组Max,其中Max[i]是k的A[k]的最大值

编辑时:有一个角情况,其中数组的顺序是反向排序的,在这种情况下,所有i的Max[i]=Min[i]=A[i]。这可以在O(n)时间内检测到,在这种情况下,您只需返回最大化A[i 1]-A[i]的一对相邻元素(这将是负数)。

西门胜涝
2023-03-14

@mrip解决方案的时间复杂度为O(n),空间复杂度为O(n)。这是正确的,但是对于这个问题,只有O(1)空间复杂度就足够了。

int min=a[0],ans=0;
for (int i=1;i<n;i++)
    if (a[i]<min) min=a[i];
    else ans=max(ans,a[i]-min);
return ans;
 类似资料:
  • 假设您给出了一个大小为N的数组,它可以有正数和负数。我们需要返回总和的最大子数组的长度等于k。我尝试使用滑动窗口算法,但很快我发现它在这里不起作用,因为数组元素可以有正负整数。 例如: arr=[-20,-38,-4,-7,10,4]和k = 3很明显,有两个可能的子阵列([-4,-7,10,4]和[-7,10]),它们的和等于给定的k。因此输出将是4(最大子阵列的长度) 蛮力方法将采取O(n^2

  • 我需要写一个函数,把一个正整数数组a、一个正整数B和一个正整数C作为输入。然后,函数应该返回长度为B和C的两个不相交子数组a的元素的总和,这些元素的总和最大化这些总和。例如,如果A=[3,11,1,2,9,4,5,6,1],B=4和C=2,那么函数应该返回38。这是因为A的长度为B和C的两个最大的不相交子数组是[9,4,5,6]和[3,11]。第一个子阵列的元素之和是9+4+5+6=24,第二个子

  • 问题内容: 我想知道是否有人可以帮助我找到一组变量的最大值并将它们分配给另一个变量。这是我的代码段,可能有助于理解我在说什么。 问题答案: 在Java中,您可以像这样使用Math.max: 不是最优雅的,但它会起作用。 另外,为获得更强大的解决方案,请定义以下功能: 您可以通过以下方式致电给您:

  • 本文向大家介绍写一个函数找出给定数组中的最大差值相关面试题,主要包含被问及写一个函数找出给定数组中的最大差值时的应答技巧和注意事项,需要的朋友参考一下 function getMax(arr){ for(let i=arr[arr.length-1];i>0;i--){ for(let j=0;j<arr.length-i-1;j++){ if(arr[j]>arr[j+1]){ let temp

  • 给定一个正整数数组,返回最大和。 只有一个限制:如果你选择两个连续的元素,你不允许在你的总数中添加任何后续的元素,你的总和是到那个点为止的累积量。你的目标是最大化你的总和。 输入:[1,4,2,10] 产出:14 输入:[1,4,5,3] 产出:9 我在第一个测试案例中一直失败。我尝试了DP解决方案,但产生了相同的结果?任何帮助都将不胜感激。