题意:给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。
get:通过本题的接法我们可以发现如何在n维数组中找出最大(小)的i个数,if中将遍历值放在最值位置,后续else if逐个更新!
class Solution {
/**
* 求出数组中最大的三个数以及最小的两个数
*
* @param nums
* @return
*/
public int maximumProduct(int[] nums) {
int min1 = Integer.MAX_VALUE, min2 = min1; // 更新两个最小值
int max1 = Integer.MIN_VALUE, max2 = max1, max3 = max1; // 更新三个最大值
for (int n : nums) {
if (n <= min1) {
min2 = min1;
min1 = n; // 最小值
} else if (n <= min2) {
// n lies between min1 and min2
min2 = n;
}
if (n >= max1) {
// n is greater than max1, max2 and max3
max3 = max2;
max2 = max1;
max1 = n; // 最大值
} else if (n >= max2) {
// n lies betweeen max1 and max2
max3 = max2;
max2 = n;
} else if (n >= max3) {
// n lies betwen max2 and max3
max3 = n;
}
}
return Math.max(min1 * min2 * max1, max1 * max2 * max3);
}
}