【刷题打卡】628. 三个数的最大乘积

84 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、题目描述:

628. 三个数的最大乘积 - 力扣(LeetCode) (leetcode-cn.com)

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

示例 1:

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

示例 2:

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

示例 3:

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

  提示:

  • 3 <= nums.length <= 10^4
  • -1000 <= nums[i] <= 1000

二、思路分析:

首先先把数组排序,然后遍历数组,将负数的个数记录起来,如果负数个数大于2,则把最前面的两个负数还有数组的最后一位相乘,然后跟数组最后三位相乘的数比较,取最大值. 如果负数个数小于2,则直接取最后三位的乘积

三、AC 代码:

class Solution {
    public int maximumProduct(int[] nums) {
        int l=nums.length;
        int count=0;
        Arrays.sort(nums);
        for(int i=0;i<nums.length;i++){
            if(nums[i]<0) count++;
            if(nums[i]>0) break;
        }
        if(count>=2) return Math.max(nums[l-1]*nums[l-2]*nums[l-3],nums[0]*nums[1]*nums[l-1]);
        else return nums[l-1]*nums[l-2]*nums[l-3];
    }
}

四、总结:

线性优化这么牛逼,思路还有待提高呀!

范文参考:

根据数组中正数、零、负数的量情况进行讨论【有点笨的方法】 - 三个数的最大乘积 - 力扣(LeetCode) (leetcode-cn.com)

线性扫描方式解题 - 三个数的最大乘积 - 力扣(LeetCode) (leetcode-cn.com)