题目描述:
题解思路及代码(注意不是只包括全是负数或全是正数的情况,两种方法):
class Solution {
public:
int maximumProduct(vector<int>& nums) {
// //1、如果是全正或者全负,直接排序后找最大的三个数
// //2、如果有正有负,可以找出最大的三个正数与最小的两个负数与最大的正数相乘的较大值
// int n=nums.size();
// sort(nums.begin(),nums.end());
// return max(nums[0]*nums[1]*nums[n-1],nums[n-1]*nums[n-2]*nums[n-3]);
//可以直接遍历扫描
int n=nums.size();
//最大的三个正数 最大/第二大/第三大
int max1=INT_MIN,max2=INT_MIN,max3=INT_MIN;
//最小的两个负数 最小/第二小
int min1=INT_MAX,min2=INT_MAX;
for(int num:nums)
{
if(num<min1)
{
min2=min1;
min1=num;
}
else if(num<min2)
{
min2=num;
}
if(num>max1)
{
max3=max2;
max2=max1;
max1=num;
}
else if(num>max2)
{
max3=max2;
max2=num;
}
else if(num>max3)
{
max3=num;
}
}
return max(max1*max2*max3,min1*min2*max1);
}
};