[数论]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]);
    }
};
发布了512 篇原创文章 · 获赞 175 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/qq_43152052/article/details/104129555