Skip to content

Commit d671d5f

Browse files
committed
Time: 252 ms (100%), Space: 34.4 MB (100%) - LeetHub
1 parent 2dbd7c0 commit d671d5f

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# time complexity: O(nlogn)
2+
# space complexity: O(n)
3+
from typing import List
4+
5+
6+
class Solution:
7+
def maxProduct(self, nums: List[int]) -> int:
8+
9+
MAX, MIN = 10**5, -10**5
10+
sortedNums = sorted(nums)
11+
candidates = []
12+
13+
def prod(a, b, c):
14+
return a * b * c
15+
16+
smallest = sortedNums[:3]
17+
largest = sortedNums[-3:]
18+
19+
candidates.append(prod(largest[-1], largest[-2], largest[-3]))
20+
candidates.append(prod(smallest[0], smallest[1], largest[-1]))
21+
22+
extremes = smallest + largest
23+
for val in (MIN, MAX):
24+
for x in extremes:
25+
temp = sortedNums[:]
26+
temp.remove(x)
27+
temp.append(val)
28+
temp.sort()
29+
candidates.append(prod(temp[-1], temp[-2], temp[-3]))
30+
candidates.append(prod(temp[0], temp[1], temp[-1]))
31+
32+
return max(candidates)
33+
34+
35+
nums = [-5, 7, 0]
36+
print(Solution().maxProduct(nums))
37+
nums = [-4, -2, -1, -3]
38+
print(Solution().maxProduct(nums))
39+
nums = [0, 10, 0]
40+
print(Solution().maxProduct(nums))
41+
nums = [11, 650, 903, -590, 402, 646, 435, -499, -945, -367, 35, 701, 674, 607, -916, 480, -94, -633, -815, -612, 737, -665, 265, 853, -804, -618, 193, 63, -248, -544, -501, 378, 24, 766, -339, -667, -71, -778, -260, -620, -705, 747, -930, 122, 877, -424, -91, -880, 217, -439, -150, -285, 912, 51, -753, -232, -775, -95, 975, -515, -133, -882, -201, 996, -911, 675, -456, -994, -998, 224, 771, 214, 491, 353, -310, -890, 746, -263, 621, -941, 673, -877, -719, 87, -498, 858, 325, -770, 375, 410, 292, -526, 829, 755, 58, 611, 588, 760, 53, 526, -126, -714, 440, -953, -139, -586, 219, -223, 18, -704, -763, 563, 678, 221, 843, 358, -686, 846, 124, -520, -571, 106, 434, -246, -68, -105, -210, 611, 750, 831, -173, -537, -462, -698, -49, -647, 611, -657, -174, -376, -623, -135, 567, -1, 241, -622, -703, -208, -617, 576, -877, -236, 180, 307, -610, -408, 506, -301, -376, 473, -845, -779, 508, -814, 555, -679, 366, -702, -253, 91, 411, -571, -894, -666, 976, 748, 795, 767, 358, 550, -418, -88, -316, -713, 994, 670, 973, 307, -188, 888, -639, 705, 370, -889, 329, -574, 933, -182, -728, -242, 369, -296, 329, 882, -233, 0, 41, 294, 323, 418, 39, 376, -100, 906, 69, -716, 412, -701, 729, -689, -316, 832, -574, 469, 139, -164, -211, 345, 286, -948, 75, -722, 370, 238, -352, -810, -13, -112, 340, 671, -73, -970, 165, -956, -79, 33, -597, 111, 758, -237, -564, 557, -270, 250, -302, 651, -154, 762, 546, -330, 509, -724, 66, 880, -644, -188, -285, 159, 355, 616, -518, 77, -632, -207, 509, 73, -999, 395, 935, 603, 460, 336, 742, 714, -144, -908, 32,
42+
-975, 533, -482, 622, -877, 524, 128, 96, -156, 117, 371, -378, 453, -512, -737, -472, 26, 926, -702, 717, 711, -79, 605, -615, -334, 819, 254, -75, 265, -509, -237, -883, 85, -822, -709, 697, 533, 570, -768, -471, -634, -239, -127, -983, 377, 403, 222, 209, -747, -620, -771, 762, -394, -905, -503, -923, -385, -689, -235, -846, 476, -541, 486, -713, -989, 915, 295, 156, -896, 268, -621, 787, 143, -776, -221, -322, 992, 29, -142, 374, 989, -71, -843, 112, -908, 841, 276, -737, 261, -760, -858, -981, -430, 886, -115, -324, 214, -120, -810, -477, -34, 977, -117, 97, -692, 645, -454, 804, 454, 682, -883, -409, -276, 648, 807, -872, -291, -649, -722, 692, -997, 567, -34, -319, 485, 844, -669, -954, -116, 786, -484, -460, 467, 114, 33, 602, 766, -485, 345, -137, -881, 118, -738, -974, 570, 590, -15, 793, -181, 541, -213, -798, 394, 346, 626, 241, -643, 63, -399, 478, 675, 542, -3, -312, 17, 63, -218, -340, -685, 956, -150, -227, -925, -435, 101, -273, -231, -264, -940, 731, -776, -830, 22, 573, 51, -814, -446, -900, 522, -710, -543, 488, 141, -784, 651, 285, -594, -862, 538, 656, -559, -197, -483, 154, -513, -603, -998, 414, 269, -969, 14, 875, 807, 525, -402, 477, -263, 755, 986, 221, 458, 110, -275, -383, -177, 0, -800, -587, 78, -871, 794, -379, -7, -476, 873, 69, -858, -898, -824, -225, 638, -575, -382, 556, 988, 398, -463, 903, 343, -902, 788, 388, 518, 275, 92, -575, -877, 497, 245, 980, -217, 300, 143, -293, 687, -501, -436, 426, -797, -290, 536, -214, -62, 590, 34, 447, -685, 578, -727, -50, -346, 162, 865, 901, -749, -730, -453]
43+
print(Solution().maxProduct(nums))

0 commit comments

Comments
 (0)