1+ package exercise.medium.id57
2+
3+ import kotlin.math.max
4+ import kotlin.math.min
5+
6+ class Solution57 {
7+ fun insert (intervals : Array <IntArray >, newInterval : IntArray ): Array <IntArray > {
8+
9+ if (intervals.isEmpty()) return arrayOf(newInterval)
10+ if (newInterval.isEmpty()) return intervals
11+
12+ println (" [${newInterval[0 ]} , ${newInterval[1 ]} ]" )
13+
14+ var start = newInterval[0 ]
15+ var end = newInterval[1 ]
16+ val left = 0
17+ val right = 1
18+
19+ val merged = mutableListOf<IntArray >()
20+ var index = 0
21+ while (index < intervals.size && intervals[index][right] < start) {
22+ merged.add(intervals[index])
23+ index++
24+ }
25+
26+
27+ while (index < intervals.size && intervals[index][left] <= end) {
28+ start = min(start, intervals[index][left])
29+ end = max(end, intervals[index][right])
30+ index++
31+ }
32+
33+ merged.add(intArrayOf(start, end))
34+
35+ while (index < intervals.size) {
36+ merged.add(intervals[index])
37+ index++
38+ }
39+
40+ return merged.toTypedArray()
41+ }
42+ /*
43+
44+ fun insert(intervals: Array<IntArray>, newInterval: IntArray): Array<IntArray> {
45+
46+ if (intervals.isEmpty()) return arrayOf(newInterval)
47+
48+ println("[${newInterval[0]}, ${newInterval[1]}]")
49+
50+ val start = newInterval[0]
51+ val end = newInterval[1]
52+ val left = 0
53+ val right = 1
54+
55+ val merged1 = mutableListOf<IntArray>()
56+ var index1 = 0
57+ while (index1 < intervals.size && intervals[index1][right] < start) {
58+ merged1.add(intervals[index1])
59+ index1++
60+ }
61+
62+ if (intervals.size == 1) index1--
63+
64+ val merged2 = mutableListOf<IntArray>()
65+ var index2 = intervals.size - 1
66+ while (index2 >= 0 && intervals[index2][left] > end) {
67+ merged2.add(intervals[index2])
68+ index2--
69+ }
70+
71+ if (intervals.size > 1) {
72+ val min = min(start, intervals[index1][left])
73+ val max = max(end, intervals[index2][right])
74+ merged1.add(intArrayOf(min, max))
75+ }
76+ merged2.forEach { merged1.add(it) }
77+
78+ return merged1.toTypedArray()
79+ }
80+
81+ var index2 = index
82+ while (index2 < intervals.size) {
83+ if (intervals[index2][left] > end) {
84+ array.add(intervals[index2])
85+ index2++
86+ }
87+ }
88+
89+ for ((index, arr) in intervals.withIndex()) {
90+ if (arr[right] < start) {
91+ array.add(arr)
92+ }
93+ }
94+
95+
96+ while (index < intervals.size ) {
97+ val value = intervals[index][right]
98+ if (value < start) {
99+ array.add(intervals[index])
100+ } else if (value < intervals[index][leftIndex]) {
101+ intervals[index][right] = end
102+ array.add(intervals[index])
103+ sliceStart = index
104+ break
105+ }
106+ }
107+
108+ for (index in intervals.indices) {
109+ val value = intervals[index][rightIndex]
110+ if (value < start) {
111+ array.add(intervals[index])
112+ } else if (value < intervals[index][leftIndex]) {
113+ intervals[index][rightIndex] = end
114+ array.add(intervals[index])
115+ sliceStart = index
116+ break
117+ }
118+ }
119+
120+ fun insert(intervals: Array<IntArray>, newInterval: IntArray): Array<IntArray> {
121+
122+ println("[${newInterval[0]}, ${newInterval[1]}]")
123+
124+ val arrayFlatten = mutableListOf<Int>()
125+ for (index in intervals.indices) {
126+ arrayFlatten.add(intervals[index][0])
127+ arrayFlatten.add(intervals[index][1])
128+ }
129+
130+ val arrayNonOverlapping = mutableListOf<Int>()
131+ for (index in 0..<arrayFlatten.size) {
132+ if (arrayFlatten[index] !in newInterval[0]..newInterval[1]) {
133+ println("==> ${arrayFlatten[index]}")
134+ arrayNonOverlapping.add(arrayFlatten[index])
135+
136+ }
137+ }
138+ val arr = mutableListOf<IntArray>()
139+ for (index in 0..arrayNonOverlapping.size - 1 step 2) {
140+ arr.add(intArrayOf(arrayNonOverlapping[index], arrayNonOverlapping[index + 1]))
141+ }
142+
143+ return arr.toTypedArray()
144+ }
145+
146+ fun insert(intervals: Array<IntArray>, newInterval: IntArray): Array<IntArray> {
147+ println("[${newInterval[0]}, ${newInterval[1]}]")
148+ val list = intervals.flatMap { it.asIterable() }.toMutableList()
149+ val start = newInterval[0]
150+ val end = newInterval[1]
151+ if (start !in list) list.add(start)
152+ if (end !in list) list.add(end)
153+ list.sort()
154+ var shiftLeft = 1
155+ var shiftRight = 1
156+ if (list.size % 2 != 0) shiftLeft--
157+ val part1: List<Int> = list.slice(0..<list.indexOf(start) - shiftLeft)
158+ if (part1.size % 2 == 0) shiftRight++
159+ val part2: List<Int> = list.slice(list.indexOf(end) + shiftRight..<list.size)
160+ val part3: List<Int> = listOf(part1, part2).flatten()
161+ val arr2 = mutableListOf<IntArray>()
162+ for (index in 0..part3.size - 1 step 2) {
163+ arr2.add(intArrayOf(part3[index], part3[index + 1]))
164+ }
165+ return arr2.toTypedArray()
166+ }
167+
168+ */
169+ }
0 commit comments