題目:老闆有一袋金塊(共 n 塊,n 是 2 的冪( n ≥ 2 )),最優秀的僱員得到其中最重的一塊,最差的僱員得到其中最輕的一塊。假設有一臺比較重量的儀器,希望用最少的比較次數找出最重和最輕的金塊。並對自己的程序進行複雜性分析。
import java.util.Scanner;
public class Main {
private static void minmax(int i, int j, int[] gold, int[] result) {
int[] ltemp = new int[2];
int[] rtemp = new int[2];
if (i == j - 1) {
if (gold[i] <= gold[j]) {
result[0] = gold[i];
result[1] = gold[j];
} else {
result[0] = gold[j];
result[1] = gold[i];
}
} else {
int mid = (i + j) / 2;
minmax(i, mid, gold, ltemp);
minmax(mid + 1, j, gold, rtemp);
if (ltemp[0] <= rtemp[0]) {
result[0] = ltemp[0];
} else {
result[0] = rtemp[0];
}
if (ltemp[1] >= rtemp[1]) {
result[1] = ltemp[1];
} else {
result[1] = rtemp[1];
}
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int n = scanner.nextInt();
int[] gold = new int[n];
for (int i = 0; i < n; i++) {
gold[i] = scanner.nextInt();
}
int[] result = new int[2];
minmax(0, n - 1, gold, result);
System.out.println("min: " + result[0]);
System.out.println("max: " + result[1]);
}
scanner.close();
}
}