[数论]leetcode628:三个数的最大乘积(easy)

题目:
在这里插入图片描述
题解:

  • 分情况,找规律
  • 首先对数组进行排序,然后找到规律返回即可。
  • 1)若数组内的数字全为负数,那么最后结果肯定为负数。而最大值就是最后面两个负数相乘获得绝对值的最大值,然后再乘以一个绝对值较小的负数即可,那就是最前面那个负数。
  • 2)若数组内的数字全为正数,那么最后结果肯定为正数,而且就是最大三个正数的积。
  • 3)若数组内的数字既有负数又有正数还有0的话,那么返回前面那两种情况中的较大值即可。

代码如下:

class Solution {
public:
    int maximumProduct(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        int n=nums.size();
        //无论有多少正数或者负数,首先一定会选择最大数即nums[n-1],然后无非就是选择开头两位还是倒数两位 
        return max(nums[0]*nums[1]*nums[n-1],nums[n-3]*nums[n-2]*nums[n-1]);
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章