我在草稿纸上列举了一些有正数有负数的数组,列了多种情况,然后找规律发现,三个数的最大乘积的情况是两种:1.三个最大的数相乘;2.两个最小的数乘1个最大的数。所以主要要做的就是循环数组一遍,找出其中最大的3个数,以及最小的两个数。
class Solution {
public:int maximumProduct(vector<int>& nums) {if(nums.size() == 3)return nums[0]*nums[1]*nums[2];if(nums.size() == 4){int mul1 = nums[0]*nums[1]*nums[2];int mul2 = nums[3]*nums[1]*nums[2];int mul3 = nums[0]*nums[1]*nums[3];if(mul1>mul2 && mul1 >mul3)return mul1;if(mul2>mul1 && mul2 >mul3)return mul2;if(mul3>mul2 && mul3 >mul1)return mul3; }int max1,max2,max3;int min1,min2;max1= INT_MIN;max2= INT_MIN;max3= INT_MIN;min1= INT_MAX;min2= INT_MAX;for(int i = 0;i<nums.size();++i){if(nums[i] > max1){max3 = max2;max2 = max1;max1 = nums[i]; }else if(nums[i] > max2){max3 = max2;max2 = nums[i];}else if(nums[i] > max3){max3 = nums[i];}if(nums[i] < min1){min2 = min1;min1 = nums[i];}else if(nums[i] < min2){min2 = nums[i];}}int mul1 = min1*min2*max1;int mul2 = max1*max2*max3;return max(mul1,mul2);}
};