-
Notifications
You must be signed in to change notification settings - Fork 17
/
Copy pathJoinIntervals.java
58 lines (51 loc) · 1.74 KB
/
JoinIntervals.java
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
51
52
53
54
55
56
57
58
package by.andd3dfx.common;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* <pre>
* Дан упорядоченный массив натуральных чисел,
* повторяющихся элементов в списке нет.
* Нужно преобразовать в строку с перечислением интервалов через запятую.
*
* Пример:
* [2, 3, 5, 6, 7, 8, 11, 20, 21, 22] -> "2-3,5-8,11,20-22"
* </pre>
*/
public class JoinIntervals {
public static String transform(int[] a) {
if (a.length == 0) {
return "";
}
List<String> items = new ArrayList<>();
int lastItem = a[0];
int startIntervalValue = a[0];
boolean intervalDetected = false;
int index = 1;
while (index < a.length) {
var currItem = a[index];
if (currItem == lastItem + 1) {
if (!intervalDetected) {
startIntervalValue = lastItem;
intervalDetected = true;
}
} else {
if (intervalDetected) {
items.add(startIntervalValue + "-" + lastItem);
intervalDetected = false;
} else {
items.add(String.valueOf(lastItem));
}
}
lastItem = currItem;
index++;
}
if (intervalDetected) {
items.add(startIntervalValue + "-" + lastItem);
} else {
items.add(String.valueOf(lastItem));
}
return items.stream()
.collect(Collectors.joining(","));
}
}