g1801_1900.s1840_maximum_building_height.Solution.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-kotlin Show documentation
Show all versions of leetcode-in-kotlin Show documentation
Kotlin-based LeetCode algorithm problem solutions, regularly updated
package g1801_1900.s1840_maximum_building_height
// #Hard #Array #Math #2023_06_22_Time_1210_ms_(100.00%)_Space_118.6_MB_(100.00%)
class Solution {
fun maxBuilding(n: Int, restrictions: Array): Int {
if (restrictions.isEmpty()) {
return n - 1
}
val m = restrictions.size
restrictions.sortWith(compareBy { a: IntArray -> a[0] })
for (i in m - 2 downTo 0) {
restrictions[i][1] =
restrictions[i][1].coerceAtMost(restrictions[i + 1][1] + restrictions[i + 1][0] - restrictions[i][0])
}
var id = 1
var height = 0
var res = 0
for (r in restrictions) {
var currMax: Int
if (r[1] >= height + r[0] - id) {
currMax = height + r[0] - id
height = currMax
} else {
currMax = (height + r[0] - id + r[1]) / 2
height = r[1]
}
id = r[0]
res = res.coerceAtLeast(currMax)
}
if (id != n) {
res = res.coerceAtLeast(height + n - id)
}
return res
}
}