【C++刷题】力扣-#628-三个数的最大乘积
题目形貌给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。
示例
示例 1
输入:nums =
输出:6
示例 2
输入:nums =
输出:24
示例 3
输入:nums = [-1,-2,-3]
输出:-6
题解
这个题目可以通过排序和考虑正数与负数的组合来办理。
[*]排序:起首对数组进行排序。
[*]考虑环境:
○ 如果数组中包含负数,最大的乘积可能来自两个最小的负数(它们的乘积为正数)和一个最大的正数。
○ 如果数组中不包含负数,最大的乘积就是最大的三个数的乘积。
[*]盘算最大乘积:根据排序后的数组,盘算上述两种环境的乘积,并返回较大的那个。
代码实现
int maximumProduct(vector<int>& nums) {
sort(nums.begin(), nums.end());
int n = nums.size();
// 情况1: 两个最小的负数和一个最大的正数
int product1 = nums * nums * nums;
// 情况2: 三个最大的正数
int product2 = nums * nums * nums;
return max(product1, product2);
}
复杂度分析
● 时间复杂度:O(n log n),其中 n 是数组 nums 的长度。主要时间斲丧在排序上。
● 空间复杂度:O(1),除了输入数组外,我们只使用了常数个额外变量。
这个算法通过排序和考虑两种可能的环境来盘算最大乘积。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]