LeetCode, ๐ƒ๐š๐ฒ-8/365-DSA-Coding ๐‰๐จ๐ฎ๐ซ๐ง๐ž๐ฒโ€ฆGoogle Prepโ€ฆ

Aaqib Ali
2 min readJan 7, 2025

Today I Learned: Problem (Maximum Product Subarray)

Today, I tackled the problem of finding the maximum product subarray in a list of integers. The challenge was to determine the contiguous subarray within the array that has the largest product.

I Solved This Problem Using This Approach:

I used the two-pass traversal method:

  1. Left-to-Right Traversal:
  • I calculated the product of contiguous elements from the start to the end of the array.
  • If a zero was encountered, I reset the product to handle the break in continuity.
  • I kept track of the maximum product during this pass.
  1. Right-to-Left Traversal:
  • To account for cases where the maximum product might span the rightmost part of the array, I repeated the same logic but traversed the array in reverse.

This approach ensured that all potential subarrays were considered.

class Solution:
def maxProduct(self, nums):
curProd = 1
maxProd = float('-inf') # Equivalent to INT_MIN in C++

# Traverse from left to right
for num in nums:
curProd *= num
maxProd = max(maxProd, curProd)
if curProd == 0:
curProd = 1 # Reset if product becomes zero

curProd = 1 # Reset for the right-to-left traversal

# Traverse from right to left
for num in reversed(nums):
curProd *= num
maxProd = max(maxProd, curProd)
if curProd == 0:
curProd = 1 # Reset if product becomes zero

return maxProd

What Are Other Possible Approaches?

  1. Dynamic Programming:
  • Maintain two arrays: one for the maximum product and another for the minimum product at each index.
  • Update these arrays by considering the current number and the product of the current number with the previous max or min.
  • This approach ensures precise tracking of subarray products while handling negative numbers effectively.
  1. Brute Force:
  • Iterate over all possible subarrays, calculate their products, and find the maximum.
  • While straightforward, this approach has a time complexity of O(n2)O(nยฒ)O(n2), making it inefficient for large arrays.
  1. Kadaneโ€™s Algorithm (Modified):
  • Extend the standard Kadaneโ€™s algorithm to handle products instead of sums.
  • Track both maximum and minimum products at each step to manage the effect of negative numbers.

Learnings

  • Handling zeros and negative numbers is crucial in subarray product problems.
  • Traversing both left-to-right and right-to-left ensures all scenarios are covered efficiently.
  • Resetting values when encountering zeros helps divide the problem into manageable segments.

Usage

This algorithm is applicable in scenarios where maximum multiplicative sub-ranges are needed, such as:

  • Financial data analysis (maximizing profit over a period).
  • Signal processing (identifying regions of high amplitude).
  • Game development (finding optimal strategies based on scores).

Thank you for reading this!
If you want to discuss your approach or share your solution, letโ€™s connect and collaborate! Special thanks to icodeGuru for support and guidance.

Keep learning, sharing, smiling, living, loving, and coding!

--

--

No responses yet