讨论/技术交流/三数之积/

给定一个数组,求该数组内三个元素的最大乘积,请问这个要怎么做?求各位大神指点一下

共 9 个回复

Leetcode上的题都有题解

2

可以在这里 628. 三个数的最大乘积 的评论区和题解区找到思路和代码。

2

今天每日一题

1

排序
对比 第一个* 第二个 * 最后一个 和 最后三个相乘
int [] nums;
Arrays.sort(nums);
//因为可能会有负数, 负负得正 * 最大的那个
return Math.max(nums[0]*nums[1]*nums[nums.length-1],nums[nums.length-3]*nums[nums.length-2]*nums[nums.length-1])

枚举 可能发生的情况 如果值最大 必须 有两个 负负+正 或者三个正正正,正数需取最大,负数取最小,然后就想到排序

排序啊,拿到前三个或者最后三个就行。

遍历一遍数组,找到最小的两个数a,b和最大的三个数c,d,e然后返回 a*b*ec*d*e中大的一个,因为数组内的数字不都是正数,所以最大值可能是绝对值最大的两个负数和最大的正数的积或者最大的三个正数的积。而且这种方式不需要对数组排序,时间复杂度和空间复杂度都更低。

用arrays.sort排序,之后直接对比数组最后三个数乘机与0,1,length-1的数值,返回最大

排序,要么最后三个,要么前两个和最后一个的乘积。

这题应该有题解,去找找吧