leetcode:628. 三个数的最大乘积
题目
给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。
示例:
输入:nums = [1,2,3]输出:6
输入:nums = [1,2,3,4]输出:24
输入:nums = [-1,-2,-3]输出:-6
解答 & 代码
三个数的最大乘积,要么是三个最大的正数的乘积,要么是两个最小的负数和最大正数的乘积,比较两种情况即可。
可以给数组排序,也可以直接遍历查找最大的三个数及最小的两个数
class Solution {public:int maximumProduct(vector<int>& nums) {int len = nums.size();sort(nums.begin(), nums.end());// 三个数的最大乘积,要么是三个最大的正数的乘积,要么是两个最小的负数和最大正数的乘积,// 比较两种情况即可int candidate1 = nums[len - 1] * nums[len - 2] * nums[len - 3];int candidate2 = nums[len - 1] * nums[0] * nums[1];return max(candidate1, candidate2);}};
复杂度分析:设数组长为 N
- 时间复杂度 O(N logN):排序的时间复杂度。如果不排序直接遍历查找的时间复杂度为 O(N)
- 空间复杂度 O(1)
执行结果:
执行结果:通过执行用时:36 ms, 在所有 C++ 提交中击败了 78.37% 的用户内存消耗:27 MB, 在所有 C++ 提交中击败了 62.02% 的用户
