三个数的最大乘积

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

示例 1:

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

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

解题思路1:先对数组进行排序,然后发现答案有两种情况,如果有负数那么最大乘积可能是前两最小负数乘以最大正数,前三个最大正数乘积,对这三种情况进行比较即可

class Solution {
    public int maximumProduct(int[] nums) {
        Arrays.sort(nums);
        
        int len = nums.length;
        int ans = 0;
        if(nums[0] < 0 && nums[1] < 0) {
            ans = Math.max(nums[0] * nums[1] * nums[2], Math.max(nums[0] * nums[1] * nums[len - 1], nums[len - 1] * nums[len - 2] * nums[len - 3]));
        } else {
            ans = nums[len - 1] * nums[len - 2] * nums[len - 3];
        }
        
        return ans;
    }
}

解题思路2:先别找出数组中最小的两个数和最大的三个数,然后对他们的乘积进行比较即可

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