class MaximumDiffrence
{
int maxDiff(int arr[], int arr_size)
{
int max_diff = arr[1] - arr[0];
int i, j;
for (i = 0; i < arr_size; i++)
{
for (j = i + 1; j < arr_size; j++)
{
if (arr[j] - arr[i] > max_diff)
max_diff = arr[j] - arr[i];
}
}
return max_diff;
}
}
最大の違いを見つけるには、非常に大きなサイズのリストに2つのforループを使用する以外の方法はありますか?これを最適化するのを手伝ってください。ありがとう。
1つのforループを使用すると、最高の要素と最低の要素を見つけることができます。それらの違いが最大の違いです。
class MaximumDifference {
int maxDiff(int arr[], int arr_size) {
int lowest = arr[0];
int highest = arr[0];
for (int i = 1; i < arr_size; ++i) {
int value = arr[i];
if (value < lowest) {
lowest = value;
}
if (value > highest) {
highest = value;
}
}
return highest - lowest;
}
}
落とし穴:
arr.length
、私たちがゼロの場合、またはarr.length
未満でarr_size
、これはエラーになります。そのような場合に何を返したいのかわかりません。Integer.MAX_VALUE
が負の場合)、これはオーバーフローする可能性があり、負の数が返されます。これはlong
、コメントでStephen Cが示唆しているように、戻り値の型をに変更することで軽減できます。この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加