2 要素法を使用します。2 つの変数 MAX_VALUE と MIN_VALUE を保持します。MAX_VALUE は最大値としてマークされ、MIN_VALUE は最小値としてマークされます。毎回、隣接する 2 つの数値を比較し、大きい方は max と比較し、小さい方は min と比較し、最大値は値と値は比較によって求められます最小値、このメソッドの比較回数は 1.5N 回です
サンプルコードは次のとおりです。
public class LookForTheMaximumAndMinimumValuesInTheArray {
static int MAX_VALUE;
static int MIN_VALUE;
public static void GetMaxAndMinByArray(int arr[]) {
MAX_VALUE = arr[0];
MIN_VALUE = arr[0];
int arrLength = arr.length;
for (int i = 1; i < arrLength - 1; i += 2) {
if (i + 1 > arrLength) {
if (arr[i] > MAX_VALUE) MAX_VALUE = arr[i];
if (arr[i] < MIN_VALUE) MIN_VALUE = arr[i];
}
//大的跟大的比 小的跟小的比~
if (arr[i] > arr[i+1]) {
if (arr[i] > MAX_VALUE) MAX_VALUE = arr[i];
if (arr[i+1] < MIN_VALUE) MIN_VALUE = arr[i+1];
}
if (arr[i] < arr[i+1]) {
if (arr[i+1] > MAX_VALUE) MAX_VALUE = arr[i+1];
if (arr[i] < MIN_VALUE) MIN_VALUE = arr[i];
}
}
}
public static void main(String[] args) {
int[] array = {520, 20, 100, 1, 3, 20, 52,1314,5200,1314};
GetMaxAndMinByArray(array);
System.out.println("当前数组中最大值为:" + MAX_VALUE);
System.out.println("当前数组中最小值为:" + MIN_VALUE);
}
}
操作の結果は次のとおりです。
個人的な要約:
デバッグで読んでみるといいですよ~ 今でも問題分解法を使っている人がほとんどだと思います. この種の問題を2段階に分けて, 最初に最大値を見つけてから, 次に最小値を見つけます.を 2 回配列するため、効率は 2 要素の方法ほど良くありません。