-
Notifications
You must be signed in to change notification settings - Fork 0
/
SummaryRanges.kt
36 lines (33 loc) · 1.59 KB
/
SummaryRanges.kt
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
package ru.romanow
/**
* Дан отсортированный целочисленный массив чисел с уникальными значениями.
* Диапазон `[a, b]` — это набор всех целых чисел от `a` до `b` (включительно).
*
* Требуется найти наименьший отсортированный список диапазонов, который охватывает
* все числа в массиве. То есть каждый элемент `nums` охватывается ровно одним из диапазонов,
* и не существует целого числа `x` такого, что `x` находится в одном из диапазонов, но не в `nums`.
*
* Каждый диапазон `[a, b]` в списке должен выводиться как:
* * `a` -> `b`, если `a` != `b`;
* * `а`, если `a` == `b`.
*
* [https://leetcode.com/problems/summary-ranges/](https://leetcode.com/problems/summary-ranges)
*/
class SummaryRanges {
fun summaryRanges(nums: IntArray): List<String> {
val result = mutableListOf<String>()
var rangeStart = 0
for (i in nums.indices) {
if (i == nums.size - 1 || nums[i] + 1 != nums[i + 1]) {
if (rangeStart != i) {
result += "${nums[rangeStart]}->${nums[i]}"
rangeStart = i + 1
} else {
result += "${nums[i]}"
rangeStart = i + 1
}
}
}
return result
}
}