给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。
示例 1:
输入: [1,2,3]
输出: 6
示例 2:
输入: [1,2,3,4]
输出: 24
注意:
给定的整型数组长度范围是[3,104],数组中所有的元素范围是[-1000, 1000]。
输入的数组中任意三个数的乘积不会超出32位有符号整数的范围。
思路:这个题其实拿到感觉很简单,这题题无非就是判断3个数乘积的最大值,无非就是以下几种情况:
1.全是正数,这个时候只用取最大的3个数即可
2.全是负数,因为是三个数,乘积肯定是负数,所以得选取3个最大的数
3.有负有正,还得分情况讨论,比如一个最大正数和两个最小负数,或者两个最小正数,一个最大负数。
思路很简单,代码实现其实也不难,代码如下:
int Compare(const void* a, const void* b)
{
return *(int*)a - *(int*)b;
}
int Max(int a, int b)
{
return a > b ? a : b;
}
int maximumProduct(int* nums, int numsSize){
qsort(nums, numsSize, sizeof(int), Compare);
return Max(nums[numsSize - 1] * nums[numsSize -2] * nums[numsSize - 3], nums[numsSize - 1] * nums[0] * nums[1]);
}
这个代码很简单,说一下这个qsort, 包含在stdlib.h头文件里,函数一共四个参数,没返回值.一个典型的qsort的写法如下:
qsort(s,n,sizeof(s[0]),cmp);
s代表参与排序的数组名(或者也可以理解成开始排序的地址,因为可以写&s[i]
这样的表达式)n代表了参与排序的元素个数,sizeof(s[0])代表了单个元素的大小,最后一个cmp就是我代码中的compare函数,这个就相当于看他的返回值,如果compare的返回值为正数,那么这个排序则是升序排序,反之则为倒序排序。