【LeetCode每日一题】——628.三个数的最大乘积

一【题目类别】

  • 排序

二【题目难度】

  • 简单

三【题目编号】

  • 628.三个数的最大乘积

四【题目描述】

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

五【题目示例】

  • 示例 1:

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

    • 输入:nums = [1,2,3,4]
    • 输出:24
  • 示例 3:

    • 输入:nums = [-1,-2,-3]
    • 输出:-6

六【题目提示】

  • 3 < = n u m s . l e n g t h < = 1 0 4 3 <= nums.length <= 10^4 3<=nums.length<=104
  • − 1000 < = n u m s [ i ] < = 1000 -1000 <= nums[i] <= 1000 1000<=nums[i]<=1000

七【解题思路】

  • 分情况讨论:
    • 数组全是正数:数组最后三个数的乘积最大
    • 数组全是负数:数组最后三个数的乘积最大
    • 数组有正数有负数:数组最前面两个数和最后一个数的乘积最大,或者最后三个数的乘积最大
  • 综上所述:要么是数组最后三个数的乘积最大,要么是数组最前面两个数和最后一个数的乘积最大,只需要返回较大值就可以了
  • 最后返回结果即可

八【时间频度】

  • 时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn) n n n为传入的数组的长度
  • 空间复杂度: O ( l o g n ) O(logn) O(logn) n n n为传入的数组的长度

九【代码实现】

  1. Java语言版
class Solution {
    
    
    public int maximumProduct(int[] nums) {
    
    
        Arrays.sort(nums);
        int len = nums.length;
        int maxOne = nums[len - 1];
        int maxTwo = nums[len - 2];
        int maxThree = nums[len - 3];
        int minOne = nums[0];
        int minTwo = nums[1];
        if(maxOne * maxTwo * maxThree > minOne * minTwo * maxOne){
    
    
            return maxOne * maxTwo * maxThree;
        }else{
    
    
            return minOne * minTwo * maxOne;
        }
    }
}
  1. C语言版
int cmp(const void *a, const void *b)
{
    
    
    return *(int*)a - *(int*)b;
}

int maximumProduct(int* nums, int numsSize)
{
    
    
    qsort(nums, numsSize, sizeof(int), cmp);
    return fmax(nums[0] * nums[1] * nums[numsSize - 1], nums[numsSize - 1] * nums[numsSize -2] * nums[numsSize - 3]);
}
  1. Python语言版
class Solution:
    def maximumProduct(self, nums: List[int]) -> int:
        nums.sort()
        n = len(nums)
        return max(nums[0] * nums[1] * nums[n - 1], nums[n - 1] * nums[n - 2] * nums[n - 3])
  1. C++语言版
class Solution {
    
    
public:
    int maximumProduct(vector<int>& nums) {
    
    
        sort(nums.begin(), nums.end());
        int n = nums.size();
        return max(nums[0] * nums[1] * nums[n - 1], nums[n - 1] * nums[n - 2] * nums[n - 3]);
    }
};

十【提交结果】

  1. Java语言版
    在这里插入图片描述

  2. C语言版
    在这里插入图片描述

  3. Python语言版
    在这里插入图片描述

  4. C++语言版
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/IronmanJay/article/details/132288403