Skip to content

Commit c630907

Browse files
committed
Improved 3454
1 parent be635be commit c630907

File tree

1 file changed

+15
-15
lines changed
  • src/main/kotlin/g3401_3500/s3454_separate_squares_ii

1 file changed

+15
-15
lines changed

src/main/kotlin/g3401_3500/s3454_separate_squares_ii/Solution.kt

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,15 @@ class Solution {
99
val m = 2 * n
1010
val events = createEvents(squares, m)
1111
val xsRaw = createXsRaw(squares, m)
12-
events.sortWith<Event?> { a, b: Event? -> a!!.y.compareTo(b!!.y) }
12+
events.sortWith<Event> { a, b: Event -> a.y.compareTo(b.y) }
1313
val xs = compress(xsRaw)
1414
val totalUnionArea = calculateTotalUnionArea(events, xs, m)
1515
val target = totalUnionArea / 2.0
1616
return findSplitPoint(events, xs, m, target)
1717
}
1818

19-
private fun createEvents(squares: Array<IntArray>, m: Int): Array<Event?> {
20-
val events = arrayOfNulls<Event>(m)
19+
private fun createEvents(squares: Array<IntArray>, m: Int): Array<Event> {
20+
val events = Array(m) { Event(0.0, 0.0, 0.0, 0) }
2121
var idx = 0
2222
for (sq in squares) {
2323
val x = sq[0].toDouble()
@@ -43,34 +43,34 @@ class Solution {
4343
return xsRaw
4444
}
4545

46-
private fun calculateTotalUnionArea(events: Array<Event?>, xs: DoubleArray, m: Int): Double {
46+
private fun calculateTotalUnionArea(events: Array<Event>, xs: DoubleArray, m: Int): Double {
4747
val segTree = SegmentTree(xs)
4848
var totalUnionArea = 0.0
49-
var lastY = events[0]!!.y
49+
var lastY = events[0].y
5050
var i = 0
5151
while (i < m) {
52-
val curY = events[i]!!.y
52+
val curY = events[i].y
5353
if (curY > lastY) {
5454
val unionX = segTree.query()
5555
totalUnionArea += unionX * (curY - lastY)
5656
lastY = curY
5757
}
58-
while (i < m && events[i]!!.y == curY) {
59-
val indices = findIndices(xs, events[i]!!)
60-
segTree.update(1, 0, xs.size - 1, indices[0], indices[1], events[i]!!.type)
58+
while (i < m && events[i].y == curY) {
59+
val indices = findIndices(xs, events[i])
60+
segTree.update(1, 0, xs.size - 1, indices[0], indices[1], events[i].type)
6161
i++
6262
}
6363
}
6464
return totalUnionArea
6565
}
6666

67-
private fun findSplitPoint(events: Array<Event?>, xs: DoubleArray, m: Int, target: Double): Double {
67+
private fun findSplitPoint(events: Array<Event>, xs: DoubleArray, m: Int, target: Double): Double {
6868
val segTree = SegmentTree(xs)
69-
var lastY = events[0]!!.y
69+
var lastY = events[0].y
7070
var cumArea = 0.0
7171
var i = 0
7272
while (i < m) {
73-
val curY = events[i]!!.y
73+
val curY = events[i].y
7474
if (curY > lastY) {
7575
val unionX = segTree.query()
7676
val dy = curY - lastY
@@ -80,9 +80,9 @@ class Solution {
8080
cumArea += unionX * dy
8181
lastY = curY
8282
}
83-
while (i < m && events[i]!!.y == curY) {
84-
val indices = findIndices(xs, events[i]!!)
85-
segTree.update(1, 0, xs.size - 1, indices[0], indices[1], events[i]!!.type)
83+
while (i < m && events[i].y == curY) {
84+
val indices = findIndices(xs, events[i])
85+
segTree.update(1, 0, xs.size - 1, indices[0], indices[1], events[i].type)
8686
i++
8787
}
8888
}

0 commit comments

Comments
 (0)