Problem Statement
You are given a list of integers, and you are allowed to group elements into pairs. Each element must either belong to a single pair or remain unpaired. Sum the products of the pairs with the values of the unpaired elements. Your goal is to maximize this sum.
For example, consider the list {0, 1, 2, 4, 3, 5}. If you make the pairs (2, 3) and (4, 5), the sum is 0 + 1 + (2 * 3) + (4 * 5) = 27.
You are given a
Definition
- Class:
- CreatePairs
- Method:
- maximalSum
- Parameters:
- int[]
- Returns:
- int
- Method signature:
- int maximalSum(int[] data)
- (be sure your method is public)
Constraints
- data will contain between 1 and 50 elements, inclusive.
- Each element of data will be between -1000 and 1000, inclusive.
Examples
{0, 1, 2, 4, 3, 5}
Returns: 27
The example from the problem statement.
{-1, 1, 2, 3}
Returns: 6
If we create a pair (2, 3) we get the sum (-1) + 1 + (2 * 3) = 6.
{-1}
Returns: -1
No pairs can be created, so the answer is -1.
{-1, 0, 1}
Returns: 1
In this case we can create a pair (-1, 0) to make the sum equal to (-1) * 0 + 1 = 1.
{0}
Returns: 0
{0, 0}
Returns: 0
{2, 2}
Returns: 4
{-2, -2}
Returns: 4
{-2, 2}
Returns: 0
{-1000}
Returns: -1000
{1000}
Returns: 1000
{-1000, -1000, 1000, 1000}
Returns: 2000000
{-1000, 1000}
Returns: 0
{1}
Returns: 1
{2}
Returns: 2
{1, 1}
Returns: 2
{1, 2}
Returns: 3
{2, 3}
Returns: 6
{1, 1, 1}
Returns: 3
{1, 1, 2}
Returns: 4
{1, 2, 3}
Returns: 7
{2, 3, 4}
Returns: 14
{0, 1}
Returns: 1
{0, 2}
Returns: 2
{0, 1, 1}
Returns: 2
{0, 1, 2}
Returns: 3
{0, 2, 3}
Returns: 6
{0, 1, 1, 1}
Returns: 3
{0, 1, 1, 2}
Returns: 4
{0, 1, 2, 3}
Returns: 7
{0, 2, 3, 4}
Returns: 14
{-1}
Returns: -1
{-2}
Returns: -2
{-1, -1}
Returns: 1
{-1, -2}
Returns: 2
{-2, -3}
Returns: 6
{-1, -1, -1}
Returns: 0
{-1, -1, -2}
Returns: 1
{-1, -2, -3}
Returns: 5
{-2, -3, -4}
Returns: 10
{0, -1}
Returns: 0
{0, -2}
Returns: 0
{0, -1, -1}
Returns: 1
{0, -1, -2}
Returns: 2
{0, -2, -3}
Returns: 6
{0, -1, -1, -1}
Returns: 1
{0, -1, -1, -2}
Returns: 2
{0, -1, -2, -3}
Returns: 6
{0, -2, -3, -4}
Returns: 12
{-1, 1}
Returns: 0
{-2, 2}
Returns: 0
{-1, -1, 1, 1}
Returns: 3
{-1, -2, 1, 2}
Returns: 5
{-2, -3, 2, 3}
Returns: 12
{-1, -1, -1, 1, 1, 1}
Returns: 3
{-1, -1, -2, 1, 1, 2}
Returns: 5
{-1, -2, -3, 1, 2, 3}
Returns: 12
{-2, -3, -4, 2, 3, 4}
Returns: 24
{-1, 0, 1}
Returns: 1
{-2, 0, 2}
Returns: 2
{-1, -1, 0, 1, 1}
Returns: 3
{-1, -2, 0, 1, 2}
Returns: 5
{-2, -3, 0, 2, 3}
Returns: 12
{-1, -1, -1, 0, 1, 1, 1}
Returns: 4
{-1, -1, -2, 0, 1, 1, 2}
Returns: 6
{-1, -2, -3, 0, 1, 2, 3}
Returns: 13
{-2, -3, -4, 0, 2, 3, 4}
Returns: 26
{-614, -17, 662, 202, -398, 397, 325, -830, -885, 253, -221, 905, 15, -488, -131, 308, -259, -553, 842, -445, -631, -40, 321, 833, -300, -106, 247, -65, -387, 693, 517, -692, -339, 223, -477}
Returns: 4183022
{365, 143, 323, -450, -817, 626, -350, -405, 629, 799, -502, 982, 490, -254, -519, 281}
Returns: 2239547
{-600, 697, -384, -630, -810, 311, 466, 806, 767, 584, -343, -788, -335, 553, 657, 840}
Returns: 3000993
{-912, -262, 147, 737, 553, -865, -66}
Returns: 1213880
{768, -233, -669, 219, -482, 623, -879, 615, 306, 416, 352, -815, 578, -422, 732, -373, 137, -780, -254, 606}
Returns: 3045290
{112, -13, 262, 188, -686, 658, -393, 339, 530, -287, -889, -248, 782, -383, -637, 187, 504, 180, -883, -518, 641, 439, 601, -584, 859}
Returns: 3523599
{392, -484, -556, -748, 743, -980, -1, 553, 669, -281, 517, 653, 664, 892, 944, 530, -626, 56, -196, 977, -919, -246, 999, 946, -667, -913, 356}
Returns: 6090258
{568, -777, 47, 265, 85, 592, -566, 5, -818, -11, -528, -939, 838, 309, 239, -653, -262, 123, -306, -269, -959, 816, 265, -679, 685, -486, 341, -665, 589, 516, 284, -484, 622, 428, -959, -438, -365, 766, -49, 554, 439, 186, 844}
Returns: 6446049
{52, -881, 29, -760, -931, -21, 257, -558, 498, 699, -748, 846, 887, -203, -80, -955, -880, -308, -198, 501, 706}
Returns: 3953390
{-106, 978, -119, 972, -590, -267, 429, -44, -420, 914, 499, -160, 95}
Returns: 1750547
{-696, 436, 265, 573, 32, -94, -487, 22, -191, -39, 283, -446, 70, -926, 943, 584, -834, 907, 816, 307, -435, -327, -115, 659, 479, 675, 307, 214}
Returns: 3723603
{694, -703, -983, -507, -499, -496, 810}
Returns: 1505686
{165, -552, -392, 982, 397, -871, 121, -516, -349, 398, -37, 760, -805, 172, 132, -664, 869, -895, 727, -681, 746, 802}
Returns: 4117041
{379, 435, -846, 303, -907, -786, -80, 625, 25, 740}
Returns: 1465142
{640, -663, 526}
Returns: 335977
{-213, 317, 941, -487, 124, 646, 913, 485}
Returns: 1315482
{-251, 83, 457, -386, -912, -393, 3, -187, 718, 347, -159, -409, -30, -355, -388, -730, 595, 421, 223, 435, -783}
Returns: 2144491
{867, -626, 429, 993, 292, -173, 393, 645, 433, -507, -733, 375, 980, -721, -672, -272, 1, 758, 106, 248, 189, -216, 392, 895, 837, 778, -535, -466, 147, 594, 368, 706, 942, -515, 586, 391, -608, -881, -28, -994, 851, 95, 257, 335, -626, -36}
Returns: 7818754
{609, 47, -806, -738, 484, -317, -932, -963, -906, 8, -37, 456, -67, -88, 996, -57, 756, -128, 506, 461, 247, 130, -675, -234, 649, 730, -676, 994, 82, -7, 187, 431, 779, 545, -99, -187, -66, 469, 911, 988, 411, -306, 420, -705, -995, 200, -196, 501, 499, -861}
Returns: 8097821
{633, 206, 477, -948, 559, 249, -784, -334, -344, -730, 847, 753, -589, -199, -945, -567, 290, 8, -655, 58, -267, -964, 621, 526, -384, -332, -651, -540, 8, 512, -615, -284, 586, 443, -942, 190, -458, 519, -385, 389, 333}
Returns: 6173096
{-398, 745, -900}
Returns: 358945
{296, 128, 130, 647, -233, 540, -832, -802, -331, -561, 959, 371, -646, 691, -164, 404, 403, -418, 713, -336, -839, -94, 316, 201, -615, -460, -985, 233, -417, -474, 74, -192}
Returns: 4253392
{105, -321, 323, -152, -334, -406, -846, -122, -901, 770, -908, -132, 499, 763, 815, -854, -292, 310, -891, 725, 654, 884, 66, 143, -50, -396, 968, -232, 746}
Returns: 4938859
{-928, -378, -736, 188, 41, 355, 29, -281, -807, 440, 226, 400, -654, 196, 173, 973, -582, -278, -617, -419, 546, 344, 163, -343, 922, -340, -770, -97, -937, 793, 330, -796, -248}
Returns: 4789065
{-713, -187, -666, 713, -499, 657, -364, 707, 320, -892, 174, -697, -719, 57, 915, -604, -319, -362, 276, -727, -552, -547, -399, -135, -227, -375, -171, 950, 487, -458, 563, -613, -364, -383, 271, -998, -764, -72, 833, 184, -334, 60, 150, -192, -328, -990, -960, 589, -545}
Returns: 7621446
{-871, -579, 805, -506, 973, 843, 752, 388, 104, 185, -293, -474, -744, -487, -445, -429, -554, -38, -330, -541, -835, 535, -672, 327, -621, -12, -523, 239, 559, 876, -662, -924, 472, -648, -193, -590, -66, 835}
Returns: 6452112
{-285, 259, 104, 762, 763, 612, 957, 69, 550, -10, 984, 519, -417, -951, -422, -850, 885, -502, -226, -893, -451, -732, 991, -253, -790, 195, 288, -687, -762}
Returns: 5736984
{237, 616, -964, 196, -32, 704, 264, 444, 529, -16, 336}
Returns: 834528
{116, 780, -962, 930, -710, -239, 618, -326, 757, -744, 159, -5, 823, 879, -368}
Returns: 3000597
{107, -539, -580, 375, -397, -244, -309, -652, 692, 866, 450, -406, 196, -111, -384, 354, 67, 733, 971, -719, -199, 568, 316, 607, 179, 899, 689, 600, -581, 712, -17, -979, -657, -328, 804, -193, -356, -162, 920, 682, 851, 864, -857, -63}
Returns: 7281612
{152, -14, -913}
Returns: 12934
{-62, 932, 613, -600, -241, 675, 526, 944, -711, -833, -28, 981, -996, 810, 569, -815, 646, 643, 735, -776, -57, -128, 691, 672, 594, -423, 381, -530, 924, -54}
Returns: 6364462
{527}
Returns: 527
{878, -538, 531, 306, 297, -807}
Returns: 991266
{-34, -972, 33, 865, -701, -433, -612, -519, 363, 600, 212, -633, -68, -396, -598, 42}
Returns: 2150252
{388, 861, 794, 135, 904, -75, -272, 753, -826, 401, -207, -41, -309, -98, 382, 746, -888, -264, -414, 918, 616, 29, 734, 90, 742, -677, -749, 447, -924, 376, 503}
Returns: 5176022
{-380, 347, -355, -502, -829, 131, -868, -111, 592, 28, -55, -747, -728, -525, -861, -271, -333, -934, 818, 963, -779, -426, 100, 369, -460, -812, 211, 911, -842, 700, -748, -643}
Returns: 5968632
{837, -226, 508, -30, 481, 728, -670, 306, 979, -103, -499, -640, 269, -594, -705, 345, -963, -617, 318, -445, -365, -604, -973, -123, 954, -264, -471, 623, 997, -857, 603, 553, -637, 85, 439, -577, 353, -844, -955, -101, -84, 721, 799, 184}
Returns: 7911512
{363, 108, 206, -303, -733, -349, 699, 359, -905, -828, -963, -202, -525, -712, 151, -584, 689, -720, -628, -12, 640, 348, 565, -342, -282, 280, -639, -467, -361, 23}
Returns: 4179344
{593, 850, -892, -286, 124, -391, -593, 636, 418, 323, -809, 714, 934, -768, -45, 330, -356, 54, 973, 851, -195, 656}
Returns: 4027683
{1, 1}
Returns: 2
{-1000, -1, -2, 1, 2, 3 }
Returns: 2006
{-10, -9, 0 }
Returns: 90
{1 }
Returns: 1
{1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 }
Returns: 25000000
{3, 2, -1, -2, -3 }
Returns: 11
{-3, -2, -1, 0, 1, 2, 3 }
Returns: 13
{1, 2 }
Returns: 3
{-1, -1, 0 }
Returns: 1
{-1, -1, -1, -1, -5 }
Returns: 5
{-5, -4, -3, -3, -2, -2, 0, 1, 1, 1, 3, 4 }
Returns: 48
{4, 4, -1, -4, -4 }
Returns: 31
{-1 }
Returns: -1
{1, 1, 0, -5, -6, -7 }
Returns: 44
{-2, -1, 0 }
Returns: 2
{-3, -2, -1 }
Returns: 5
{-5, 0, -1 }
Returns: 5
{-1, -1, -1 }
Returns: 0
{-5, -3, -2, -2 }
Returns: 19
{3, 3, 3, 3 }
Returns: 18
{1, 1, 1, 1, 1, 1, 1, 2, -2, -1, 0, -3, -5, -8 }
Returns: 55
{1, 1, 1, 1, 1, 1, 1, 2, -2, -1, 0 }
Returns: 11
{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, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50 }
Returns: 21451
{-4, -3, -2, 3, 4 }
Returns: 22
{1, 0, 1, -1, 2, 3, -2, 2, -7 }
Returns: 24
{-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000 }
Returns: 25000000
{2, 3, -5, 5 }
Returns: 12
{-4, 3, 3 }
Returns: 5
{1, 1, -999, -1000, 1000, -5, -7, -9, 0, 1, -1, -1, -1 }
Returns: 1000072
{-2, -1, -1 }
Returns: 1
{-5, -5, -1, 0, 5 }
Returns: 30
{-1, -2, -3, 0, 0, 0, 1, 1, 3 }
Returns: 11
{-1, -2, -3, 0, 0, 0, 1, 1, 3, -1, -3, -6, 8, 9, -9, 12, 11, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 7, 6 }
Returns: 417
{-1, -2, -3, 0, 0, 0, 1, 1, 3, -1, -3, -6, 8, 9, -9, 12, 11, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1 }
Returns: 375
{0, 9, 0, -3, -9 }
Returns: 36
{1, 1, 1, 1, 1, 1, 1, 1, 1 }
Returns: 9
{-1, 0 }
Returns: 0
{-50, -2, -1, -1, 1000, 1, 1, -100 }
Returns: 6003
{-5, -1, 0 }
Returns: 5
{-10, -15 }
Returns: 150
{-400, -500, -900, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 999, 999 }
Returns: 1448011
{2, 3, 10 }
Returns: 32
{-1, 0, 1, -2, -3, 0 }
Returns: 7
{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, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 421 }
Returns: 27101
{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, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 421, 422, 423, 424, 425, 0, -1, 1 }
Returns: 385808
{1, 8 }
Returns: 9
{-5, -5 }
Returns: 25
{34, 45, 676, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, -34, -1, -1, -1, -1, -454, -22, -33, -1, -1 }
Returns: 46623
{43, 34, 1, 1, 0, 0, 0, 0, -123, -456, -1, -1 }
Returns: 57553
{-1000, -1000, 0 }
Returns: 1000000
{-1000, -1000 }
Returns: 1000000
{-40, -30, 0 }
Returns: 1200
{4, 5, 6 }
Returns: 34
{5, 6, 7 }
Returns: 47
{0, 5, -5, -8, 3, -7, 5, -2 }
Returns: 94
{-2, -3, -4 }
Returns: 10
{-5, -4, -1 }
Returns: 19
{1, 3 }
Returns: 4
{-2 }
Returns: -2
{-2, 0 }
Returns: 0
{-6, -5, -3, -2, 0 }
Returns: 36
{1, 3, 5 }
Returns: 16
{-1, 3, 3 }
Returns: 8
{1, 1, 1 }
Returns: 3
{-1, 0, 1 }
Returns: 1
{-1, 1, 1 }
Returns: 1
{3, 3 }
Returns: 9
{-5, -10, 8 }
Returns: 58
{-100, -50, -50 }
Returns: 4950
{-1, -1 }
Returns: 1
{0, -1, 0, -1, -1 }
Returns: 1
{-10, -20, -30 }
Returns: 590
{-5, -1, 2, 4, 5 }
Returns: 27
{-100, -20, -23, -57, 0, 2, 43, 53, 87, 255 }
Returns: 30626
{0, -1, 0 }
Returns: 0
{0, -1, 0, -1 }
Returns: 1
{-3, -2, -1, 0 }
Returns: 6
{-2, 1, -3, 0, 1, 2, 3 }
Returns: 14
{-5, 1, 2, 4 }
Returns: 4
{1, 1, 1, 2, 2, 2 }
Returns: 9
{-4, -3, -2, -1, 1, 2, 3 }
Returns: 21
{5, 4, 3 }
Returns: 23
{0, -1, -1, -1, -1, -1 }
Returns: 2
{-2, -1, -1, 2, 3 }
Returns: 7
{1, 2, 3 }
Returns: 7
{1, 1, 4, 0, 0, 0, -1, 1, -2, -1, 0 }
Returns: 9
{44, -5, 55, -5, 1 }
Returns: 2446
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
Returns: 10
{0, 0, 0, 0, 1 }
Returns: 1
{1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2 }
Returns: 16
{-3, -2, -1, 2, 3 }
Returns: 11
{-7, -6, -5, 0, 1, 2, 3, 5, 6 }
Returns: 79
{3, 2, 1, 0, -1 }
Returns: 7
{0, -1, -2 }
Returns: 2
{-5, -5, 0, 0 }
Returns: 25