Skip to content

Commit 7fb3d66

Browse files
committed
1877_Minimize_Maximum_Pair_Sum_in_Array
1 parent e94b40b commit 7fb3d66

File tree

2 files changed

+45
-1
lines changed

2 files changed

+45
-1
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ I have solved quite a number of problems from several topics. See the below tabl
193193
|91| [900. RLE Iterator](https://tinyurl.com/yxry5n5b) | [Python](https://tinyurl.com/wu6rdaw/900_RLE_Iterator.py), [Swift](https://tinyurl.com/wuja3c4/900_RLE_Iterator.swift) | --- | Medium | - |
194194
|92| [954. Array of Doubled Pairs](https://tinyurl.com/yftjpl7m) | [Swift](https://tinyurl.com/wuja3c4/954_Array_of_Doubled_Pairs.swift) | --- | Medium | - |
195195
|93| [853. Car Fleet](https://tinyurl.com/y5h6ggg9) | [Swift](https://tinyurl.com/wuja3c4/853_Car_Fleet.swift) | [Vid 1](https://tinyurl.com/yh628kc9), [Art 1](https://tinyurl.com/ykyq2os5) ] | Medium | - |
196+
|94| [1877. Minimize Maximum Pair Sum in Array](https://tinyurl.com/yj2fbqu3) | [Swift](https://tinyurl.comz/wuja3c4/1877_Minimize_Maximum_Pair_Sum_in_Array.swift) | [Art 1](https://tinyurl.com/ygbnautj) ] | Medium | - |
196197

197198

198199
</p>
@@ -617,7 +618,7 @@ BFS, DFS, Dijkstra, Floyd–Warshall, Bellman-Ford, Kruskal, Prim's, Minimum Spa
617618
|51| [690. Employee Importance](https://tinyurl.com/yyweuk43) | [Python](https://tinyurl.com/wu6rdaw/690_Employee_Importance.py), [Swift](https://tinyurl.com/wuja3c4/690_Employee_Importance.swift) | --- | Easy |📌 BFS |
618619
|52| **[1631. Path With Minimum Effort](https://tinyurl.com/y3nh25d9)** | [Python](https://tinyurl.com/wu6rdaw/1631_Path_With_Minimum_Effort.py), [Swift](https://tinyurl.com/wuja3c4/1631_Path_With_Minimum_Effort.swift) | --- | Medium |📌 BFS, DFS, Binary search |
619620
|53| **[547. Friend Circles](https://tinyurl.com/r39pov7)** | [Python](https://tinyurl.com/wu6rdaw/547_Friend_Circles.py), [Swift](https://tinyurl.com/wuja3c4/547_Friend_Circles.swift) | [Art 1](https://tinyurl.com/y6qm62wq), [Art 2](https://tinyurl.com/y2gk7dq4) | Medium |📌 BFS, DFS, Union Find |
620-
|53| **[1254. Number of Closed Islands](https://tinyurl.com/r39pov7)** | [Swift](https://tinyurl.com/wuja3c4/1254_Number_of_Closed_Islands.swift) | [Art 1](https://tinyurl.com/y6qm62wq), [Art 2](https://tinyurl.com/y2gk7dq4) | Medium |📌 BFS, DFS, Union Find |
621+
|53| **[1254. Number of Closed Islands](https://tinyurl.com/r39pov7)** | [Swift](https://tinyurl.com/wuja3c4/1254_Number_of_Closed_Islands.swift) | [Art 1](https://tinyurl.com/yzedwp3y), [Art 2](https://tinyurl.com/ye5jolg7) | Medium |📌 BFS, DFS, Union Find |
621622

622623

623624
</p>
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// Brute-Force. DFS with Backtracking. TLE
2+
class Solution {
3+
func minPairSum(_ nums: [Int]) -> Int {
4+
var (minMaxSum, currentSums, usedIndexes) = (Int.max, [Int](), Set<Int>())
5+
minPairSumDFSHelper(nums, &minMaxSum, &currentSums, &usedIndexes)
6+
return minMaxSum
7+
}
8+
9+
func minPairSumDFSHelper(_ nums: [Int], _ minMaxSum: inout Int, _ currentSums: inout [Int], _ usedIndexes: inout Set<Int>) {
10+
if usedIndexes.count == nums.count {
11+
minMaxSum = [currentSums.max()!, minMaxSum].min()!
12+
return
13+
}
14+
for (index, item) in nums.enumerated() {
15+
if !usedIndexes.contains(index) {
16+
usedIndexes.insert(index)
17+
for (index2, item2) in nums.enumerated() {
18+
if !usedIndexes.contains(index2) {
19+
usedIndexes.insert(index2)
20+
let currentSum = item + item2
21+
currentSums.append(currentSum)
22+
minPairSumDFSHelper(nums, &minMaxSum, &currentSums, &usedIndexes)
23+
currentSums.removeLast() // Backtrack
24+
usedIndexes.remove(index2) // Backtrack
25+
}
26+
}
27+
usedIndexes.remove(index) // Backtrack
28+
}
29+
}
30+
}
31+
}
32+
33+
// Greedy with sorting. Accepted. Time: O(nlogn)
34+
class Solution {
35+
func minPairSum(_ nums: [Int]) -> Int {
36+
var (minMaxSum, sortedNums, j) = (Int.min, nums.sorted(), nums.count - 1)
37+
for i in 0..<(sortedNums.count / 2) {
38+
minMaxSum = [minMaxSum, sortedNums[i] + sortedNums[j]].max()!
39+
j -= 1
40+
}
41+
return minMaxSum
42+
}
43+
}

0 commit comments

Comments
 (0)