package class029; public class Code03_MaxLeftMaxRight { // 笨办法,但是好想 public static int solution1(int[] arr) { if (arr == null || arr.length < 2) { return 0; } int N = arr.length; int ans = Integer.MIN_VALUE; for (int leftEnd = 0; leftEnd < N - 1; leftEnd++) { int leftMax = arr[0]; for (int i = 1; i <= leftEnd; i++) { leftMax = Math.max(leftMax, arr[i]); } int rightMax = arr[leftEnd + 1]; for (int i = leftEnd + 2; i < N; i++) { rightMax = Math.max(rightMax, arr[i]); } ans = Math.max(ans, Math.abs(leftMax - rightMax)); } return ans; } // 好办法,是我们真正想测试的 public static int solution2(int[] arr) { if (arr == null || arr.length < 2) { return 0; } int N = arr.length; int max = arr[0]; for (int i = 1; i < N; i++) { max = Math.max(max, arr[i]); } return max - Math.min(arr[0], arr[N - 1]); } public static int[] randomArray(int maxLen, int maxValue) { int len = (int) (Math.random() * (maxLen + 1)); int[] arr = new int[len]; for (int i = 0; i < arr.length; i++) { arr[i] = (int) (Math.random() * (maxValue + 1)) - (int) (Math.random() * (maxValue + 1)); } return arr; } public static void main(String[] args) { // 随机数组的最大长度 int maxLen = 6; // 随机数组值的范围 int maxValue = 30; // 测试次数 int testTime = 3000000; System.out.println("如果没有错误信息打印,说明所有测试通过"); System.out.println("测试开始"); for (int i = 0; i < testTime; i++) { // 随机得到一个数组,长度也随机,每个值也随机 int[] arr = randomArray(maxLen, maxValue); // 用方法1跑出答案1 int ans1 = solution1(arr); // 用方法2跑出答案2 int ans2 = solution2(arr); // 如果答案1和答案2不一样,提示出错了 if (ans1 != ans2) { System.out.println("出错了!"); System.out.println(ans1 + " , " + ans2); for (int k = 0; k < arr.length; k++) { System.out.print(arr[k] + " "); } System.out.println(); break; } } System.out.println("测试结束"); } }