Given an integer array, find three numbers whose product is maximum and output the maximum product.
Example 1:
Input: [1,2,3] Output: 6
Example 2:
Input: [1,2,3,4] Output: 24
Note:
- The length of the given array will be in range [3,104] and all elements are in the range [-1000, 1000].
- Multiplication of any three numbers in the input won't exceed the range of 32-bit signed intege
1,排序
2,判断若都为正或者都为复数,则最后三位数相乘
3,若数组只有3位数,则直接相乘
4,有正有负且长度大于三,比较最后三位数相乘与最后一位和前两位相乘,大的返回
#pragma once
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class Solution {
public:
int maximumProduct(vector<int>& nums) {
sort(nums.begin(), nums.end());
int m=1;
//都大于0或者都小于0的情况下
if (nums[0] >= 0 || nums[nums.size() - 1] <= 0)
{
m = nums[nums.size() - 1] * nums[nums.size() -2] * nums[nums.size() - 3];
}
//只有三位数
else if(nums.size()==3)
{
m = nums[0] * nums[1] * nums[2];
}
//最后三位数与最后一位和前两位相乘
else
{
m = nums[nums.size() - 1] * nums[nums.size() - 2] * nums[nums.size() - 3];
int m1= nums[nums.size() - 1] * nums[0] * nums[1];
if (m1 > m)
m = m1;
}
return m;
}
};