int cmp(const void *testA, const void *testB)
{
int *a = (int *)testA;
int *b = (int *)testB;
return *a < *b;/*降序排列*/
}
int maximumProduct(int* nums, int numsSize)
{
int max = 0, max1 = 0, max2 = 0;
qsort(nums, numsSize, sizeof(int), cmp);
/*判断前三个数的乘积以及后两个数与第一个数的乘积谁大*/
max1 = nums[0] * nums[1] * nums[2];
max2 = nums[0] * nums[numsSize - 1] * nums[numsSize - 2];
max = max1 > max2 ? max1 : max2;
return max;
}
分析:降序排列后
1.如果数组全部都是正数,就是前三个数的乘积最大!
2.如果数组中存在负数
1)后两个数字全部都为负数的话,就前三个数的乘积与后两个数字和第一个数的乘积做对比。
2)后边两个数字中只有一个为负数,那对比后肯定就是前三个数的乘积最大了。