假设我有一个整数数组:
int[] A = { 10, 3, 6, 8, 9, 4, 3 };
我的目标是找到 A[Q] 和 A[P] 之间的最大差异,使得 Q > P。
例如,如果 P = 2 且 Q = 3,则
diff = A[Q] - A[P]
diff = 8 - 6
diff = 2
如果 P = 1 且 Q = 4
diff = A[Q] - A[P]
diff = 9 - 3
diff = 6
由于 6 是所有差值之间的最大数,这就是答案。
我的解决方案如下(在 C# 中),但效率低下。
public int solution(int[] A) {
int N = A.Length;
if (N < 1) return 0;
int difference;
int largest = 0;
for (int p = 0; p < N; p++)
{
for (int q = p + 1; q < N; q++)
{
difference = A[q] - A[p];
if (difference > largest)
{
largest = difference;
}
}
}
return largest;
}
我该如何改进它以使其运行在 O(N)?谢谢!
简单地获得最大值和最小值是行不通的。被减数 (Q) 应该在减数 (P) 之后。
这个问题基于 codility 中的“最大利润”问题(http://codility.com/train/)。我的解决方案只得分 66%。它需要 O(N) 才能获得 100% 的分数。