题目
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:
1.The length of the given array will be in range [3,104] and all elements are in the range [-1000, 1000].
2.Multiplication of any three numbers in the input won’t exceed the range of 32-bit signed integer.
题意
从数组中任取三个数,求能注册的最大积。
题解
考虑到数组的有负数的情况,负数必定为2负,辣么排序后的数组最后一个值是确定的,只需比较负数绝对值最大和次大的积与正数次大和第三大的积。
C++代码
class Solution {
public:
int maximumProduct(vector<int>& nums) {
sort(nums.begin(), nums.end());
int n = nums.size();
if(nums[0]*nums[1]*nums[n-1] > nums[n-3]*nums[n-2]*nums[n-1]){
return nums[0]*nums[1]*nums[n-1];
}
else{
return nums[n-3]*nums[n-2]*nums[n-1];
}
}
};
python代码
class Solution(object):
def maximumProduct(self, nums):
"""
:type nums: List[int]
:rtype: int
3正
1正
2负
"""
nums.sort()
n = len(nums)
if nums[0]*nums[1]*nums[n-1] > nums[n-3]*nums[n-2]*nums[n-1]:
return nums[0]*nums[1]*nums[n-1]
else:
return nums[n-3]*nums[n-2]*nums[n-1]