LeetCode之628.三个数的最大乘积

给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。

示例 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的返回值为正数,那么这个排序则是升序排序,反之则为倒序排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值