#3509

Maximum Product of Subsequences With an Alternating Sum Equal to K

Hard
ArrayHash TableDynamic ProgrammingHash MapArray
LeetCode ↗

Approaches

Brute ForceOptimal
Complexity Comparison
Brute ForceOptimal Solution
Time
O(n²)
O(n * m)
Space
O(1)
O(m)
💡

Intuition

Time O(n * m)Space O(m)

The optimal solution uses dynamic programming to efficiently track the maximum product for each possible alternating sum. This reduces the need to check all subsequences explicitly and allows us to build solutions incrementally.

⚙️

Algorithm

5 steps
  1. 1Step 1: Initialize a DP array where dp[sum] holds the maximum product for that alternating sum.
  2. 2Step 2: Iterate through each number in nums, updating the DP array based on the current number's contribution to possible sums.
  3. 3Step 3: For each number, update the DP array in reverse to avoid overwriting results from the same iteration.
  4. 4Step 4: After processing all numbers, check dp[k] for the maximum product that does not exceed the limit.
  5. 5Step 5: Return the result or -1 if no valid product was found.
solution.py17 lines
1# Full working Python code
2
3def maxProduct(nums, k, limit):
4    dp = {0: 1}
5    for num in nums:
6        new_dp = dp.copy()
7        for s in list(dp.keys()):
8            new_sum = s + num
9            new_product = dp[s] * num
10            if new_product <= limit:
11                new_dp[new_sum] = max(new_dp.get(new_sum, 0), new_product)
12            new_sum = s - num
13            new_product = dp[s] * num
14            if new_product <= limit:
15                new_dp[new_sum] = max(new_dp.get(new_sum, 0), new_product)
16        dp = new_dp
17    return dp.get(k, -1)

Complexity note: The time complexity is O(n * m) where n is the number of elements in nums and m is the range of possible alternating sums. The space complexity is O(m) for the DP array.

  • 1Dynamic programming allows us to build solutions incrementally.
  • 2Tracking products alongside sums helps manage constraints effectively.

Solutions and explanations are original Tejav content. Problem titles © LeetCode — use the LeetCode button above for the full problem statement.