【题目】
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 integer.
解决一: sort Array
public class Solution {
public int maximumProduct(int[] nums) {
if(nums==null) return 0;
Arrays.sort(nums);
int ret = nums[0]*nums[1]*nums[nums.length-1];
int ret1 = nums[nums.length-1]*nums[nums.length-2]*nums[nums.length-3];
return ret>ret1? ret:ret1;
}
}
public class Solution {
public int maximumProduct(int[] nums) {
int [] maxs = new int[3];
int [] mins = new int[3];
maxs[0]=maxs[1]=maxs[2]=mins[0]=mins[1]=mins[2]=nums[0];
for(int i=0; i< nums.length;i++){
if(nums[i]>maxs[2]){maxs[0]=maxs[1];maxs[1]=maxs[2];maxs[2]=nums[i];}
else if(nums[i]>maxs[1]){maxs[0]=maxs[1];maxs[1]=nums[i];}
else if(nums[i]>maxs[0]){maxs[0]=nums[i];}
if(nums[i]<mins[2]){mins[0]=mins[1];mins[1]=mins[2];mins[2]=nums[i];}
else if(nums[i]<mins[1]){mins[0]=mins[1];mins[1]=nums[i];}
else if(nums[i]<mins[0]){mins[0]=nums[i];}
}
int ret=maxs[0]*maxs[1]*maxs[2];
int ret1 = mins[2]*mins[1]*maxs[2];
return ret>ret1? ret:ret1;
}
}
【参考】
https://leetcode.com/problems/maximum-product-of-three-numbers/#/description