LeetCode/kt/minimum-array-end.kt

23 lines
581 B
Kotlin
Raw Permalink Normal View History

class Solution {
private data class State(val result: Long, val n: Long) {
fun update(
target: Long,
mask: Long,
): State =
when {
n > 0 && mask.and(target) == 0L -> State(result.or((n.and(1L)) * mask), n.shr(1))
else -> this
}
}
fun minEnd(
n: Int,
x: Int,
): Long =
(0..Long.SIZE_BITS)
.map { 1L.shl(it) }
.fold(State(x.toLong(), n - 1L)) { s, mask ->
s.update(x.toLong(), mask)
}.result
}