一、题目描述
给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。
示例 1:
1 | 输入: [1,2,3] |
示例 2:
1 | 输入: [1,2,3,4] |
注意:
- 给定的整型数组长度范围是[3,104],数组中所有的元素范围是[-1000, 1000]。
- 输入的数组中任意三个数的乘积不会超出32位有符号整数的范围。
二、题解
1.算法描述
- 排序、选数
2.个人分析
- 对数组进行升序排序
最大乘积:
- 全是正数:选三个最大的
- 全是负数:还选三个最大的
- 有正有负:
- [-4, 0, 2, 3] : 选三个最大的
- [-4, -3, 1, 2] : 选两个负的一个正的
所以最大乘积只有两种情况:
- 第一个负数的绝对值比较小倒着选三个数
- 正着选两个数,倒着选一个数
选两个数中的较大数
3.代码
1 | int compare1(const void *a, const void *b) |