[英]How to find the maximum span of a given array of numbers?
我要解决的问题如下:我想在给定的数组中找到最大的数字范围,该数组的给定数组A由正整数和负整数组成,返回最大(A [j]-A [i] ),这样1 <= i <j <= n,我针对这个问题提出了以下nlogn时间算法-
这个算法是O(nlogn),但我不知道它是否正确。
@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;
这是一个O(n)算法。
编辑时:存在一个极端情况,即数组以相反的顺序排列,在这种情况下,所有i的Max [i] = Min [i] = A [i]。 这可以在O(n)时间中检测到,在这种情况下,您只需返回使A [i + 1] -A [i]最大化(将为负)的一对相邻元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.