leetcode 628. 三个数的最大乘积(Maximum Product of Three Numbers)

题目描述:

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

示例 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) {
        vector<int> pos;
        vector<int> neg;
        vector<int> zeros;
        for(int num : nums){
            if(num > 0){
                pos.push_back(num);
            }else if(num < 0){
                neg.push_back(num);
            }else{
                zeros.push_back(0);
            }
        }
        sort(pos.begin(), pos.end());
        sort(neg.begin(), neg.end());
        int sz1 = pos.size();
        int sz2 = neg.size();
        if(sz1 == 0){
            // no positive number
            if(zeros.empty()){
                return neg[sz2-3]*neg[sz2-2]*neg[sz2-1];
            }else{
                return 0;
            }
        }else if(sz1 == 1){
            // one positive number
            if(sz2 >= 2){
                return neg[0]*neg[1]*pos[0];
            }else{
                return 0;
            }
        }else if(sz1 == 2){
            if(zeros.empty()){
                if(sz2 == 1){
                    return neg[0]*pos[0]*pos[1];
                }else{
                    return neg[0]*neg[1]*pos[1];
                }
            }else{
                if(sz2 <= 1){
                    return 0;
                }else{
                    return neg[0]*neg[1]*pos[1];
                }
            }
        }else{
            if(sz2 <= 1){
                return pos[sz1-3]*pos[sz1-2]*pos[sz1-1];
            }else{
                int val1 = pos[sz1-3]*pos[sz1-2]*pos[sz1-1];
                int val2 = neg[0]*neg[1]*pos[sz1-1];
                return max(val1, val2);
            }
        }
    }
};

猜你喜欢

转载自www.cnblogs.com/zhanzq/p/10601635.html