Bird
Raised Fist0
DSA C++programming~20 mins

Maximum Product Subarray in DSA C++ - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Maximum Product Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of Maximum Product Subarray Calculation
What is the output of the following C++ code that finds the maximum product of a contiguous subarray?
DSA C++
int maxProduct(vector<int>& nums) {
    int maxProd = nums[0], minProd = nums[0], result = nums[0];
    for (int i = 1; i < nums.size(); i++) {
        if (nums[i] < 0) std::swap(maxProd, minProd);
        maxProd = max(nums[i], maxProd * nums[i]);
        minProd = min(nums[i], minProd * nums[i]);
        result = max(result, maxProd);
    }
    return result;
}

int main() {
    vector<int> nums = {2, 3, -2, 4};
    cout << maxProduct(nums);
    return 0;
}
A8
B4
C-2
D6
Attempts:
2 left
💡 Hint
Think about how negative numbers affect the product and why swapping max and min helps.
❓ Predict Output
intermediate
2:00remaining
Result of Maximum Product Subarray with Negative Numbers
What will be printed by this C++ code for the maximum product subarray?
DSA C++
int maxProduct(vector<int>& nums) {
    int maxProd = nums[0], minProd = nums[0], result = nums[0];
    for (int i = 1; i < nums.size(); i++) {
        if (nums[i] < 0) std::swap(maxProd, minProd);
        maxProd = max(nums[i], maxProd * nums[i]);
        minProd = min(nums[i], minProd * nums[i]);
        result = max(result, maxProd);
    }
    return result;
}

int main() {
    vector<int> nums = {-2, 0, -1};
    cout << maxProduct(nums);
    return 0;
}
A0
B-1
C-2
D1
Attempts:
2 left
💡 Hint
Zero resets the product, so consider subarrays around zero.
🔧 Debug
advanced
2:00remaining
Identify the Error in Maximum Product Subarray Code
This code aims to find the maximum product subarray but produces wrong output. What is the error?
DSA C++
int maxProduct(vector<int>& nums) {
    int maxProd = 1, minProd = 1, result = INT_MIN;
    for (int i = 0; i < nums.size(); i++) {
        if (nums[i] < 0) std::swap(maxProd, minProd);
        maxProd = max(nums[i], maxProd * nums[i]);
        minProd = min(nums[i], minProd * nums[i]);
        result = max(result, maxProd);
    }
    return result;
}
AmaxProd and minProd should start as nums[0], not 1
BSwapping maxProd and minProd should happen after updating maxProd and minProd
Cresult should be initialized to 0, not INT_MIN
DLoop should start from i = 1, not 0
Attempts:
2 left
💡 Hint
Initialization affects the first iteration's calculations.
🧠 Conceptual
advanced
2:00remaining
Why Swap maxProd and minProd When Encountering Negative Number?
In the maximum product subarray algorithm, why do we swap maxProd and minProd when the current number is negative?
ATo reset the product calculation when a negative number appears
BBecause multiplying by a negative flips max and min, so swapping keeps track of correct values
CTo avoid overflow errors caused by negative numbers
DBecause negative numbers should be ignored in product calculations
Attempts:
2 left
💡 Hint
Think about how a negative number changes the sign of a product.
🚀 Application
expert
3:00remaining
Maximum Product Subarray Result for Complex Input
Given the input array, what is the maximum product of any contiguous subarray?
DSA C++
vector<int> nums = {1, -2, -3, 0, 7, -8, -2};
A56
B48
C112
D14
Attempts:
2 left
💡 Hint
Consider how negative numbers multiply to positive and how zero resets the product.

Practice

(1/5)
1. What does the Maximum Product Subarray problem ask you to find in an integer array?
easy
A. The subarray with the smallest product of its elements
B. The contiguous subarray with the largest product of its elements
C. The longest subarray with all positive numbers
D. The subarray with the maximum sum of its elements

Solution

  1. Step 1: Understand the problem statement

    The problem asks for a contiguous part of the array where the product of all numbers is the highest possible.
  2. Step 2: Differentiate from similar problems

    This is different from maximum sum subarray; here we multiply elements, not add.
  3. Final Answer:

    The contiguous subarray with the largest product of its elements -> Option B
  4. Quick Check:

    Maximum product subarray = largest product subarray [OK]
Hint: Look for contiguous subarray with max multiplication, not sum [OK]
Common Mistakes:
  • Confusing product with sum
  • Ignoring negative numbers impact
  • Thinking about non-contiguous subarrays
2. Which of the following C++ code snippets correctly initializes variables to track maximum and minimum products for the Maximum Product Subarray problem?
easy
A. int maxProd = 1, minProd = INT_MIN;
B. int maxProd = 0, minProd = 0;
C. int maxProd = INT_MIN, minProd = INT_MAX;
D. int maxProd = 1, minProd = 1;

Solution

  1. Step 1: Understand initialization role

    We start with 1 because multiplying by 1 doesn't change product; it acts as neutral.
  2. Step 2: Check each option

    int maxProd = 1, minProd = 1; uses 1 for both maxProd and minProd, which is correct for product tracking.
  3. Final Answer:

    int maxProd = 1, minProd = 1; -> Option D
  4. Quick Check:

    Initialize maxProd and minProd to 1 [OK]
Hint: Initialize max and min product as 1 to start multiplication [OK]
Common Mistakes:
  • Using 0 which resets product
  • Using INT_MIN or INT_MAX incorrectly
  • Not initializing min product
3. What is the output of the following C++ code snippet?
int arr[] = {2, 3, -2, 4};
int n = 4;
int maxProd = arr[0], minProd = arr[0], result = arr[0];
for (int i = 1; i < n; i++) {
    if (arr[i] < 0) std::swap(maxProd, minProd);
    maxProd = std::max(arr[i], maxProd * arr[i]);
    minProd = std::min(arr[i], minProd * arr[i]);
    result = std::max(result, maxProd);
}
std::cout << result << std::endl;
medium
A. 6
B. 4
C. -2
D. 8

Solution

  1. Step 1: Trace the loop iterations

    Start with maxProd=2, minProd=2, result=2. - i=1 (3): arr[i]=3 >0, no swap maxProd = max(3, 2*3)=6 minProd = min(3, 2*3)=3 result = max(2,6)=6 - i=2 (-2): arr[i]<0, swap maxProd and minProd maxProd=3, minProd=6 maxProd = max(-2, 3*(-2))=max(-2,-6)=-2 minProd = min(-2, 6*(-2))=min(-2,-12)=-12 result = max(6,-2)=6 - i=3 (4): arr[i]=4 >0, no swap maxProd = max(4, -2*4)=max(4,-8)=4 minProd = min(4, -12*4)=min(4,-48)=-48 result = max(6,4)=6
  2. Step 2: Determine final result

    The maximum product found is 6.
  3. Final Answer:

    6 -> Option A
  4. Quick Check:

    Maximum product subarray = 6 [OK]
Hint: Swap max and min when negative number appears [OK]
Common Mistakes:
  • Not swapping max and min on negative
  • Confusing max and min updates
  • Ignoring initial values
4. Identify the bug in this C++ code snippet for Maximum Product Subarray:
int maxProduct(int arr[], int n) {
    int maxProd = 1, minProd = 1, result = 1;
    for (int i = 0; i < n; i++) {
        if (arr[i] < 0) std::swap(maxProd, minProd);
        maxProd = std::max(arr[i], maxProd * arr[i]);
        minProd = std::min(arr[i], minProd * arr[i]);
        result = std::max(result, maxProd);
    }
    return result;
}
medium
A. maxProd and minProd should be initialized to 0
B. Swapping maxProd and minProd should happen after updating them
C. Starting loop from i=0 causes incorrect initial values
D. Result should be initialized to INT_MIN

Solution

  1. Step 1: Analyze loop start and initial values

    Starting loop at i=0 uses maxProd=1 and minProd=1 before processing first element, which can cause wrong product calculations.
  2. Step 2: Correct approach for initialization and loop

    Initialize maxProd, minProd, and result to arr[0] and start loop from i=1 to correctly track products.
  3. Final Answer:

    Starting loop from i=0 causes incorrect initial values -> Option C
  4. Quick Check:

    Loop should start at 1 with initial values from arr[0] [OK]
Hint: Initialize with first element, start loop from second element [OK]
Common Mistakes:
  • Loop starting at 0 with default initial values
  • Swapping max and min at wrong time
  • Wrong initialization of result
5. Given the array int arr[] = {-1, -3, -10, 0, 60};, what is the maximum product of any contiguous subarray?
hard
A. 60
B. 180
C. 0
D. -1

Solution

  1. Step 1: Analyze subarrays and their products

    Check products of contiguous subarrays: - [-1] = -1 - [-1, -3] = 3 - [-1, -3, -10] = 30 - [-3, -10] = 30 - [-3, -10, 0] = 0 - [0, 60] = 0 - [60] = 60 - [-1, -3, -10, 0, 60] = 0 The maximum product is 30 from subarray [-1, -3, -10].
  2. Step 2: Check if any larger product exists

    Although 60 is a single element, the product 30 from three negatives is smaller. The maximum product is 30, but 180 is possible if we consider [-3, -10, 0, 60] incorrectly. Actually, the maximum product is 60 from [60]. However, the product of [-1, -3, -10] is 30, not 180. The option 180 is incorrect as no contiguous subarray produces 180.
  3. Final Answer:

    60 -> Option A
  4. Quick Check:

    Max product subarray = 60 [OK]
Hint: Multiply negatives carefully; zero resets product [OK]
Common Mistakes:
  • Ignoring zero breaks subarray
  • Multiplying across zero incorrectly
  • Not considering negative number pairs
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard