-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathstructy-115-combineIntervals.js
73 lines (58 loc) · 1.81 KB
/
structy-115-combineIntervals.js
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
// https://structy.net/problems/premium/combine-intervals
// p: arr
// r: arr
const combineIntervals = (intervals) => {
// intervals.sort(([a, b], [c, d]) => a - c);
intervals.sort((a, b) => a[0] - b[0]);
const result = [intervals[0]];
for (let i = 1; i < intervals.length; i++) {
const lastResult = result[result.length - 1];
const [lastL, lastR] = lastResult;
const [l, r] = intervals[i];
l <= lastR && lastR <= r && (lastResult[1] = r);
l > lastR && result.push(intervals[i]);
}
return result;
};
// const combineIntervals = (intervals) => {
// // todo
// intervals.sort(([a, b], [c, d]) => a - c);
// const result = [intervals[0]];
// for (let i = 1; i < intervals.length; i++) {
// const temp = [];
// const lastResult = result[result.length - 1];
// const [lastL, lastR] = lastResult;
// const [l, r] = intervals[i];
// l <= lastR && lastR <= r && (lastResult[1] = r);
// // l <= lastR && r < lastR && (lastResult[1] = r)
// lastR < l && temp.push(l, r);
// temp.length > 0 && result.push(temp);
// }
// return result;
// };
// // ------------------------------->
// // [1 4] [8 13]
// // [3 7] [12 15]
// // e:
// const intervals = [
// [1, 4],
// [12, 15],
// [3, 7],
// [8, 13],
// ];
// // -> [ [1, 7], [8, 15] ]
const intervals = [
[6, 8],
[2, 9],
[10, 12],
[20, 24],
];
// -> [ [2, 9], [10, 12], [20, 24] ]
// // ------------------------------->
// // [2 9] [10 12]
// // [6 8] [20 15]
console.log(combineIntervals(intervals));
// const [prevL, prevR] = prev;
// l <= prevR && temp.push(prevL);
// r <= prevR ? temp.push(prevR) : l < prevR && temp.push(r);
// prevR < l && prevR < r && temp.push(l, r);