其他分享
首页 > 其他分享> > Leetcode628. 三个数的最大乘积

Leetcode628. 三个数的最大乘积

作者:互联网

题意

在数组中找到三个数,使得这三个数字的乘积最大

思路

代码(排序)

class Solution {
public:
    int maximumProduct(vector<int>& nums) {
        sort(nums.begin(), nums.end());
        int len = nums.size();
        int last_three = nums[len - 1] * nums[len - 2] * nums[len - 3];
        if(nums[0] > 0 || nums[len - 1] < 0) {      //全正或全负
            return last_three;
        }else if(nums[0] < 0 && nums[1] < 0 && nums[len - 1] > 0) {     //2负1正
            int t = nums[0] * nums[1] * nums[len - 1];   
            if(t > last_three)      //和最后的三个数字的乘积进行比较
                return t;
            else    
                return last_three;
        }else   return last_three;
        return 0;
    }
};

代码(扫描)

class Solution {
public:
    int maximumProduct(vector<int>& nums) {
        int min1 = 1001, min2 = 1001; 
        int max1 = -1001, max2 = -1001, max3 = -1001;   //题目给定了数据范围
        for(auto e: nums) {
            if(e < min1) {       //比最小的min1,min2都还小
                min2 = min1;
                min1 = e;
            }else if(e < min2) {    //比min1大,但是比min2小
                min2 = e;
            }
            
            if(e > max3) {      //比最大的三个数都大
                max1 = max2;
                max2 = max3;
                max3 = e;
            }else if(e > max2) {    //比第2大的数字大,比最大的数小
                max1 = max2;
                max2 = e;
            }else if(e > max1) {    //比第3大的数字大,但是比第2大的数组小
                max1 = e;
            }
        }
        return max(min1 * min2 * max3, max1 * max2 * max3);
    }
};

标签:乘积,nums,Leetcode628,len,int,三个,max2,min1,min2
来源: https://www.cnblogs.com/MartinLwx/p/14256641.html