628. Maximum Product of Three Numbers

406 篇文章 0 订阅
406 篇文章 0 订阅

1,题目要求
Given an integer array, find three numbers whose product is maximum and output the maximum product.
这里写图片描述
需要注意的是,给定的数字中也有负数的存在,因此需要单独进行判断。
2,题目思路:
题目的要求是求出三个数的最大的成乘积,因此想到的办法便是对其进行排序,然后直接取最大的三个数的乘积即可。但是在有负数的情况是不可以的:{-4,-3,-2,-1,60},在这种情况下,最大的应该是-4 * -3 * 60,因此有负数时要另做判断。因此具体思路为对其降序排序后,计算前三个数的乘积,再计算第一个(正数最大的数)和最后两个数(如果最后两个是负数,则是在负数中绝对值最大的数)的乘积,对得到的两个结果取最大即可。
3,程序源码:

#include<algorithm>
#include<iostream>
#include<vector>

using namespace std;


class Solution {
public:
    int maximumProduct(vector<int>& nums) {
        sort(nums.begin(),nums.end(),comp);
        int length = nums.size();
        int max1 = nums[0] * nums[1] * nums[2];
        int max2 = nums[0] * nums[length-1] * nums[length-2];
        return max(max1,max2);

    }
public:
    static bool comp(const int &a,const int &b)
    {
        return a>b;
    }
};


int main()
{
    Solution sol;
    vector<int> num = {-4,-3,-2,-1,60};
    int max = sol.maximumProduct(num);
    cout<<max<<endl;
    return 0;
}

程序需要注意的一点,定义的comp函数时出现了一些问题。
一开始定义了这个函数以实现sort函数的从大到下的排列(其实没有必要),出现了错误:

>>reference to non-static member function must be called!

首先说明问题意思:这个问题是指你引用(调用)了非静态函数,但你不是通过类对象来调用的。问题的来源就是sort()函数的第三个谓词参数。为什么会是这样的呢?

按照常理来说,同一个类的非静态const成员函数中能相互调用,而不用通过类对象进行访问,为什么这里不行呢?相反如果我们把谓词函数comp()定义为static函数问题就没有了。

问题的原因其实就是函数参数不匹配的问题。因为我们普通的成员函数都有一个隐含的this指针,表面上看我们的谓词函数comp()只有两个参数,但实际上它有三个参数,而我们调用sort()排序函数的时候只需要用到两个参数进行比较,所以就出现了形参与实参不匹配的情况(函数有三个形参,但是只输入了两个实参)。

所以,解决办法就是把谓词函数comp()定义为static成员函数
原博客地址

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值