#include <limits.h>
void max_product_pair(int arr[], int size, int *item1, int *item2)
{
if (size < 2) {
*item1 = *item2 = 0; /* or handle error differently */
return;
}
int max1 = INT_MIN, max2 = INT_MIN;
int min1 = INT_MAX, min2 = INT_MAX;
for (int i = 0; i < size; i++) {
int x = arr[i];
/* Track two largest values */
if (x > max1) {
max2 = max1;
max1 = x;
} else if (x > max2) {
max2 = x;
}
/* Track two smallest values */
if (x < min1) {
min2 = min1;
min1 = x;
} else if (x < min2) {
min2 = x;
}
}
long long prod_max = (long long)max1 * max2;
long long prod_min = (long long)min1 * min2;
if (prod_max >= prod_min) {
*item1 = max1;
*item2 = max2;
} else {
*item1 = min1;
*item2 = min2;
}
}
#include <stdio.h>
int main(void)
{
int arr[] = { 3, 9, 1, 3, 7, 0, 4 };
int size = sizeof(arr) / sizeof(arr[0]);
int a, b;
max_product_pair(arr, size, &a, &b);
printf("Max product pair: %d, %d\n", a, b);
return 0;
}
/*
run:
Max product pair: 9, 7
*/