【题目】
给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。
【示例 1】
输入: [1,2,3]
输出: 6
【示例 2】
输入: [1,2,3,4]
输出: 24
【注意】
给定的整型数组长度范围是[3,104],数组中所有的元素范围是[-1000, 1000]。
输入的数组中任意三个数的乘积不会超出32位有符号整数的范围。
【代码】
class Solution {
public:
int maximumProduct(vector<int>& nums) {
sort(nums.begin(),nums.end());
int len=nums.size();
int max3_3=max(nums[len-1]*nums[len-2]*nums[len-3],nums[len-1]*nums[1]*nums[0]);
return max3_3;
}
};
【线性方法】
class Solution {
public:
int maximumProduct(vector<int>& nums) {
int min1 = 1111, min2 = 1111;
int max1 = -1111, max2 = -1111, max3 = -1111;
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 max(min1 * min2 * max1, max1 * max2 * max3);
}
};