#include <stdio.h>
int max(int a, int b) {
return (a > b) ? a : b;
}
int min(int a, int b) {
return (a < b) ? a : b;
}
int maxProduct(int* nums, int numsSize) {
if (numsSize == 0) return 0;
int max_prod = nums[0];
int min_prod = nums[0];
int result = nums[0];
for (int i = 1; i < numsSize; i++) {
if (nums[i] < 0) {
int temp = max_prod;
max_prod = min_prod;
min_prod = temp;
}
max_prod = max(nums[i], max_prod * nums[i]);
min_prod = min(nums[i], min_prod * nums[i]);
if (max_prod > result) {
result = max_prod;
}
}
return result;
}
int main() {
int nums[] = {2, -3, 4, -1, 0, 5};
int size = sizeof(nums) / sizeof(nums[0]);
int max_product = maxProduct(nums, size);
printf("Maximum product subarray = %d\n", max_product);
return 0;
}if (nums[i] < 0) { int temp = max_prod; max_prod = min_prod; min_prod = temp; }
swap max and min product when current number is negative to handle sign flip
max_prod = max(nums[i], max_prod * nums[i]);
update max product ending at current index
min_prod = min(nums[i], min_prod * nums[i]);
update min product ending at current index
if (max_prod > result) { result = max_prod; }
update overall maximum product found so far
Maximum product subarray = 24