Skip to content

Commit 41af5f4

Browse files
committed
[Array] Refactor solution to Missing Ranges
1 parent cb5974d commit 41af5f4

File tree

1 file changed

+15
-20
lines changed

1 file changed

+15
-20
lines changed

Array/MissingRanges.swift

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -8,36 +8,31 @@
88

99
class MissingRanges {
1010
func findMissingRanges(_ nums: [Int], _ lower: Int, _ upper: Int) -> [String] {
11-
if nums.isEmpty {
12-
return [getRange(lower - 1, upper + 1)]
13-
}
14-
1511
var res = [String]()
1612

17-
for (i, num) in nums.enumerated() {
18-
if i == 0 {
19-
if lower < num {
20-
res.append(getRange(lower - 1, num))
21-
}
22-
} else {
23-
if nums[i - 1] + 1 < num {
24-
res.append(getRange(nums[i - 1], num))
25-
}
26-
}
13+
guard !nums.isEmpty else {
14+
addRange(&res, lower, upper)
15+
return res
2716
}
2817

29-
if nums.last! + 1 < upper + 1 {
30-
res.append(getRange(nums.last!, upper + 1))
18+
addRange(&res, lower, nums[0] - 1)
19+
20+
for i in 1..<nums.count {
21+
addRange(&res, nums[i - 1] + 1, nums[i] - 1)
3122
}
3223

24+
addRange(&res, nums[nums.count - 1] + 1, upper)
25+
3326
return res
3427
}
3528

36-
private func getRange(_ numPrev: Int, _ numPost: Int) -> String {
37-
if numPrev + 2 == numPost {
38-
return "\(numPrev + 1)"
29+
private func addRange(_ res: inout [String], _ start: Int, _ end: Int) {
30+
if start > end {
31+
return
32+
} else if start == end {
33+
res.append("\(end)")
3934
} else {
40-
return "\(numPrev + 1)->\(numPost - 1)"
35+
res.append("\(start)->\(end)")
4136
}
4237
}
4338
}

0 commit comments

Comments
 (0)