算法笔记: 力扣#628 三个数的最大乘积

问题描述


解法 1


分析

Python 实现

1
2
3
4
5
6
7
8
class (object):
def maximumProduct(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
nums.sort()
return nums[-1]*max(nums[0]*nums[1], nums[-2]*nums[-3])

Java 实现

1
2
3
4
5
6
7
8
class {
public int maximumProduct(int[] nums) {
Arrays.sort(nums);
int sum1 = nums[0]*nums[1];
int sum2 = nums[nums.length-2]*nums[nums.length-3];
return nums[nums.length-1]*(sum1 > sum2 ? sum1 : sum2);
}
}

时间复杂度

O(nlogn).

空间复杂度

O(nlogn).

解法 2


分析

Python 实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class :
def maximumProduct(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
min1, min2, max1, max2, max3 = float('Inf'), float('Inf'), float('-Inf'), float('-Inf'), float('-Inf')
for num in nums:
if num > max1:
max1, max2, max3 = num, max1, max2
elif num > max2:
max2, max3 = num, max2
elif num > max3:
max3 = num
if num < min1:
min1, min2 = num, min1
elif num < min2:
min2 = num
return max1*max(max2*max3, min1*min2)

Java 实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class {
public int maximumProduct(int[] nums) {
int min1 = Integer.MAX_VALUE;
int min2 = Integer.MAX_VALUE;
int max1 = Integer.MIN_VALUE;
int max2 = Integer.MIN_VALUE;
int max3 = Integer.MIN_VALUE;
for(int num : nums){
if(num > max1){
max3 = max2;
max2 = max1;
max1 = num;
}else if(num > max2){
max3 = max2;
max2 = num;
}else if(num > max3){
max3 = num;
}
if(num < min1){
min2 = min1;
min1 = num;
}else if(num < min2){
min2 = num;
}
}
int sum1 = max2*max3;
int sum2 = min1*min2;
return (sum1 > sum2 ? sum1 : sum2)*max1;
}
}

时间复杂度

O(n).

空间复杂度

O(1).

链接


628. Maximum Product of Three Numbers
628. 三个数的最大乘积
(English version) Algorithm Notes: Leetcode#628 Maximum Product of Three Numbers