首页 > 代码库 > 金块问题
金块问题
金块问题
题目:老板有一袋金块(共 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(); } }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。