题目:
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.
题目意思:
找出数组的三个数,使得这三个数的乘积达到最大;
思路:
我一开始的思想是先遍历一遍,找到最大值max。然后2个for循环找另2个数乘积最大值 time o(n^2)结果超时;
然后想o(n)的解,还是先遍历一遍,找最大值max.然后在遍历一遍 设2个max2,max1,2个min1,min2找出最大的两个值和最小的两个值(不包括max值)
代码:time 0(n) space O(1)
class Solution {
public:
int summax(int a,int b){
return a>b?a:b;
}
int maximumProduct(vector<int>& nums) {
int len=nums.size();
if(len<=0) return 0;
if(len<=3){
int maximum=1;
for(int i=0;i<len;i++){
maximum*=nums[i];
}
return maximum;
}
int max=-1001,indexmax=0,max2=-1001,max3=-1001;
int min1=1001,min2=1001;
for(int i=0;i<len;i++){
if(nums[i]>max){
max = nums[i];
indexmax = i;
}
}
for(int i=0;i<len;i++){
if(i==indexmax)
continue;
if(nums[i]<min1){
min2=min1;
min1=nums[i];
}
else if(nums[i]<min2)
min2=nums[i];
if(nums[i]>max2){
max3=max2;
max2=nums[i];
}
else if(nums[i]>max3)
max3=nums[i];
}
return summax(max*max2*max3,min1*min2*max);
}
};