我想解决的问题如下:我想找到一个给定数组的给定数组的最大数字范围A由正整数和负整数组成,返回最大值(A [j] - A [i])使得1 <= i <1。 j&lt; = n,我想出了以下nlogn时间算法来解决这个问题 -
这个算法是O(nlogn),但我不知道它是否正确。
答案 0 :(得分:3)
@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;
答案 1 :(得分:2)
这是一个O(n)算法。
在编辑时:有一个角落情况,其中数组按反向排序顺序,在这种情况下,对于所有i,Max [i] = Min [i] = A [i]。这可以在O(n)时间内检测到,在这种情况下,您只需返回最大化A [i + 1] -A [i](将为负数)的相邻元素对。