原文链接:628. 三个数的最大乘积 - 力扣(LeetCode)
给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。
示例 1:
输入:nums = [1,2,3]
输出:6
示例 2:
输入:nums = [1,2,3,4]
输出:24
示例 3:
输入:nums = [-1,-2,-3]
输出:-6
提示:
3 <= nums.length <= 104
-1000 <= nums[i] <= 1000
方法一:
解题思路
排序后,只需考虑最小的两个值及最大的值的乘积 和 最大的三个值的乘积
class Solution {public int maximumProduct(int[] nums) {Arrays.sort(nums);//排序后,最末尾的三个一定是该数组中最大的int sum1 = nums[nums.length-3]*nums[nums.length-2]*nums[nums.length-1];//接下来解决负负得正的情况//从头开始寻找两个负数//因为排序后最开始的两个负数相乘最大,再与末尾的相乘int sum2 = nums[0]*nums[1]*nums[nums.length-1];//比较两种情况哪个最大return sum1>sum2?sum1:sum2;}
}
时间:11ms 空间:42.6MB
方法二:
解题思路
不做排序,直接循环查找
class Solution {public int maximumProduct(int[] nums) {// 最小的和第二小的int min1 = Integer.MAX_VALUE, min2 = Integer.MAX_VALUE;// 最大的、第二大的和第三大的int max1 = Integer.MIN_VALUE, max2 = Integer.MIN_VALUE, max3 = Integer.MIN_VALUE;for (int x : nums) {if (x < min1) {min2 = min1;min1 = x;} else if (x < min2) {min2 = x;}if (x > max1) {max3 = max2;max2 = max1;max1 = x;} else if (x > max2) {max3 = max2;max2 = x;} else if (x > max3) {max3 = x;}}return Math.max(min1 * min2 * max1, max1 * max2 * max3);}
}
时间:2ms 空间:42.5MB
上一篇:前x后x的成语有哪些