1464. Maximum Product of Two Elements in an Array

Difficulty:
Related Topics:
Similar Questions:

    Problem

    Given the array of integers nums, you will choose two different indices i and j of that array. Return the maximum value of (nums[i]-1)*(nums[j]-1).   Example 1:

    Input: nums = [3,4,5,2]
    Output: 12 
    Explanation: If you choose the indices i=1 and j=2 (indexed from 0), you will get the maximum value, that is, (nums[1]-1)*(nums[2]-1) = (4-1)*(5-1) = 3*4 = 12. 
    

    Example 2:

    Input: nums = [1,5,4,5]
    Output: 16
    Explanation: Choosing the indices i=1 and j=3 (indexed from 0), you will get the maximum value of (5-1)*(5-1) = 16.
    

    Example 3:

    Input: nums = [3,7]
    Output: 12
    

      Constraints:

    Solution

    /**
     * @param {number[]} nums
     * @return {number}
     */
    var maxProduct = function(nums) {
        if (nums.length === 2) {
            return (nums[0] - 1) * (nums[1] - 1);
        }
        var minNegativeNum = 0;
        var secondMinNegativeNum = 0;
        var maxPositiveNum = 0;
        var secondMaxPositiveNum = 0;
        for (var i = 0; i < nums.length; i++) {
            var num = nums[i] - 1;
            if (num < minNegativeNum) {
                secondMinNegativeNum = minNegativeNum;
                minNegativeNum = num;
            } else if (num < secondMinNegativeNum) {
                secondMinNegativeNum = num;
            } else if (num > maxPositiveNum) {
                secondMaxPositiveNum = maxPositiveNum;
                maxPositiveNum = num;
            } else if (num > secondMaxPositiveNum) {
                secondMaxPositiveNum = num;
            }
        }
        return Math.max(
            minNegativeNum * secondMinNegativeNum,
            maxPositiveNum * secondMaxPositiveNum,
        );
    };
    

    Explain:

    nope.

    Complexity: