最大的数就两种情况,两个负数一个正数和三个正数
我们先对数组进行排序,然后就上面两个情况的数的大小,因为数组是升序的,从小到大,最大的两个负数乘积就在数组的最前面,最大的三个正数就在数组的最后面,比较两个数即可。
如果没有负数或者正数,就比较是比较排序后数组的前后端三个数的乘积。
一、没有正数,当然负数越小乘积越大,即排序后数组的最后三个数,零大于负数
二、没有负数,数越大乘积越大,即排序后数组的最后三个数
三、一个负数,排序后的最后三个数乘积最大
四、一个正数,即开头的第一个情况。
综上,无疑就在两种情况,一种最后三个数,一种两个负数一个正数
这里还有个Java语法问题,提交的时候出现的问题就是这个,题目给的是int类型的数,他们的乘积可能会溢出,我们根据题目方法的返回类型就可以知道,题目给的乘积不会超过long类型的范围,所以这里要在后面加上一个类型转换
import java.util.*; public class Solution { /** * 最大乘积 * @param A int整型一维数组 * @return long长整型 */ public long solve (int[] A) {//给的是int类型,返回的是long的 // write code here Arrays.sort(A); return Math.max((long)A[0]*A[1]*A[A.length-1],(long)A[A.length-1]*A[A.length-2]*A[A.length-3]);//加上类型转换 } }