zoukankan      html  css  js  c++  java
  • Leetcode628. 三个数的最大乘积

    题意

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

    思路

    • 需要注意的就是如果数组有正有负的时候,那么要考虑1⃣️一正两负2⃣️三正或三负这两种情况

    • 如果我们将这个数组进行排序,那么显然

      • 1⃣️是最小的两个数和最大的数
      • 2⃣️三正三负都是最大的三分数的乘积
    • 由分类讨论结果也可以得到不排序的算法,我们只要设置变量来记住最大的三个数 + 最小的两个数字分类计算结果最后比较就好了

    代码(排序)

    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);
        }
    };
    
    如有转载,请注明出处QAQ
  • 相关阅读:
    Python36和Python27共存的方法
    普通用户启动redis
    NetHogs 实时检测网络流量 转
    Linux命令nohup+screen 转
    变更Linux下的Java版本 alternatives
    centos7下使用yum安装mysql
    CentOS6.6系统中安装配置Samba的教程
    Linux服务器中木马(肉鸡)手工清除方法(转)
    linux杀毒软件clamav安装与使用
    msys git 安装配置、git命令行使用
  • 原文地址:https://www.cnblogs.com/MartinLwx/p/14256641.html
Copyright © 2011-2022 走看看