首页 > 其他 > 详细

【LeetCode】628. 三个数的最大乘积

时间:2021-03-17 22:39:59      阅读:33      评论:0      收藏:0      [点我收藏+]

技术分享图片

解题思路

如果数组中全是正数或者全是负数,最大乘积就是最大的三个数的乘积。如果数组中既有正数又有负数,最大乘积可能是三个最大正数乘积,也可能是两个最小负数和最大正数的乘积。遍历数组找到最大的三个数和最小的两个数即可。

代码

class Solution {
    public int maximumProduct(int[] nums) {
        if (nums.length == 3) return nums[0] * nums[1] * nums[2];
        int max1 = Integer.MIN_VALUE, max2 = Integer.MIN_VALUE, max3 = Integer.MIN_VALUE;
        int min1 = Integer.MAX_VALUE, min2 = Integer.MAX_VALUE;
        for (int num : nums) {
            if (num > max1) {
                max3 = max2;
                max2 = max1;
                max1 = num;
            } else if (num > max2) {
                max3 = max2;
                max2 = num;
            } else if (num > max3) {
                max3 = num;
            }
            if (num < min1) {
                min2 = min1;
                min1 = num;
            } else if (num < min2) {
                min2 = num;
            }
        }
        return Math.max(max1 * max2 * max3, max1 * min1 * min2);
    }
}

复杂度分析

  • 时间复杂度:O(N),其中N为数组的长度。
  • 空间复杂度:O(1)。

【LeetCode】628. 三个数的最大乘积

原文:https://www.cnblogs.com/maczhen/p/14550843.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!