DDSA Solutions

Maximum product subset of an array

Time: O(n)
Space: O(1)
Advertisement

Intuition

Find maximum product of any subset. Handle negatives and zeros carefully.

Algorithm

  1. 1Count negatives and zeros. If all zeros: return 0. Remove zeros. If odd number of negatives: remove the negative closest to 0.
  2. 2Multiply remaining elements.

Common Pitfalls

  • Handle: all zeros, single element, odd count of negatives. Sort to easily identify smallest-magnitude negative.
Maximum product subset of an array.java
Java
// Approach: Handle negatives carefully: if odd count of negatives, exclude the one with smallest absolute value.
// Time: O(n) Space: O(1)
import java.util.*;

class Solution {
    public long findMaxProduct(List<Integer> arr) {
        long pro = 1, min = Integer.MAX_VALUE;
        boolean hasZero = false, hasPositive = false;
        int mod = (int) 1e9 + 7;

        if (arr.size() == 1)
            return arr.get(0);

        for (int i = 0; i < arr.size(); i++) {
            int num = arr.get(i);
            if (num == 0) {
                hasZero = true;
                continue;
            } else if (num < 0) {
                if (Math.abs(num) < Math.abs(min))
                    min = num;

                pro *= num;
                pro %= mod;
            } else {
                hasPositive = true;
                pro *= num;
                pro %= mod;
            }
        }

        if (arr.size() == 2) {
            if (hasZero)
                return 0;
        }

        if (pro < 0)
            pro /= min;

        return pro % mod;
    }
}
Advertisement
Was this solution helpful?