628. 三个数的最大乘积

给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。

示例 1:

输入:

 [1,2,3]

输出:

 6

示例 2:

输入:

 [1,2,3,4]

输出:

 24

注意:

  1. 给定的整型数组长度范围是[3,104],数组中所有的元素范围是[-1000, 1000]。
  2. 输入的数组中任意三个数的乘积不会超出32位有符号整数的范围。

三个数的话应该有几种情况

三个都是正数(数组只可能大于等于三个正数,排序选前三个就行了)

两个正数和一个负数(数组里只有三个数,如果数组里超过了两个负数两个负数负负得正)

两个负数和一个正数(两个最小的负数,一个最大的正数)

三个负数(三个最大的负数)

合并起来,你只要求出最大的三个数和最小的两个数

最大值一定是最大的两个数相乘或者最小的两个数乘上最大的那个数

class Solution {
public:
    int maximumProduct(vector<int>& nums) {
        int i,n=nums.size(),max1=-1000,max2=-1000,max3=-1000,min1=1000,min2=1000;
        for(i=0;i<n;i++){
            if(nums[i]>max1){max3=max2;max2=max1;max1=nums[i];}
            else if(nums[i]>max2){max3=max2;max2=nums[i];}
            else if(nums[i]>max3)max3=nums[i];
            if(nums[i]<min1){min2=min1;min1=nums[i];}
            else if(nums[i]<min2)min2=nums[i];
        }
        return max(max1*max2*max3,min1*min2*max1);
    }
};

作者:cai-liao-xian-zhi
链接:https://leetcode-cn.com/problems/maximum-product-of-three-numbers/solution/ji-lu-zui-da-de-san-ge-shu-he-zui-xiao-de-liang-ge/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

发表评论

您的电子邮箱地址不会被公开。