三个数的最大乘机
整型数组 nums,在数组中找出由三个数字组成的最大乘机,并输出这个乘积。(乘积不会越界)
重点考察:线性扫描
排序法:
public static void main(String[] args) {System.out.println(sort(new int[]{1, 2, 3, 4, 5}));System.out.println(sort(new int[]{-5, -4, -3, -2, -1}));System.out.println(sort(new int[]{-3, -2, -1, 1, 2}));System.out.println(sort(new int[]{-3, 1, 2, 3, 4}));
}public static int sort(int[] nums) {Arrays.sort(nums);int len = nums.length;return Math.max(nums[len - 1] * nums[len - 2] * nums[len - 3],nums[0] * nums[1] * nums[len - 1]);
}
线性扫描:
public static int getMaxMin(int[] nums) {int min1 = Integer.MAX_VALUE, min2 = Integer.MAX_VALUE;int max1 = Integer.MIN_VALUE, max2 = Integer.MIN_VALUE, max3 = Integer.MIN_VALUE;for (int x : nums) {if (x < min1) {min2 = min1;min1 = x;} else if (x < min2) {min2 = x;}if (x > max1) {max3 = max2;max2 = max1;max1 = x;} else if (x > max2) {max3 = max2;max2 = x;} else if (x > max3) {max3 = x;}}return Math.max(min1 * min2 * max1, max1 * max2 * max3);
}
以 [-3, -5, 2, 1, 4] 为例: