整数の配列があるとします。
int[] A = { 10, 3, 6, 8, 9, 4, 3 };
私の目標は、Q > P となる A[Q] と A[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% しかありませんでした。100% のスコアには O(N) が必要です。