当前位置: 代码迷 >> 综合 >> 628. 三个数的最大乘积
  详细解决方案

628. 三个数的最大乘积

热度:41   发布时间:2024-03-07 17:00:11.0

给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。

示例 1:

输入: [1,2,3]
输出: 6
示例 2:

输入: [1,2,3,4]
输出: 24
注意:

给定的整型数组长度范围是[3,104],数组中所有的元素范围是[-1000, 1000]。
输入的数组中任意三个数的乘积不会超出32位有符号整数的范围。

分析:

排序
我们将数组进行升序排序,如果数组中所有的元素都是非负数,那么答案即为最后三个元素的乘积。

如果数组中出现了负数,那么我们还需要考虑乘积中包含负数的情况,显然选择最小的两个负数和最大的一个正数是最优的,即为前两个元素与最后一个元素的乘积。

上述两个结果中的较大值就是答案。注意我们可以不用判断数组中到底有没有正数,0 或者负数,因为上述两个结果实际上已经包含了所有情况,最大值一定在其中。

class Solution {
public:int maximumProduct(vector<int>& nums) {int maxs1=1,maxs2=1;sort(nums.begin(),nums.end());maxs1=nums[0]*nums[1]*nums[nums.size()-1];  //有负数情况:前两个数乘以最后一个数maxs2=nums[nums.size()-3]*nums[nums.size()-2]*nums[nums.size()-1];  //无负数情况,最后三个数相乘return max(maxs1,maxs2);}
};

 

  相关解决方案