金塊問題

金塊問題

題目:老闆有一袋金塊(共 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();
	}
}
發佈了143 篇原創文章 · 獲贊 19 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章