三个数的最大乘机
整型数组 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] 为例: