kt: add «2401. Longest Nice Subarray»

URL:	https://leetcode.com/problems/longest-nice-subarray/
Signed-off-by: Matej Focko <me@mfocko.xyz>
This commit is contained in:
Matej Focko 2025-03-18 19:08:40 +01:00
parent aec179520a
commit 790eeb39ef
Signed by: mfocko
SSH key fingerprint: SHA256:icm0fIOSJUpy5+1x23sfr+hLtF9UhY8VpMC7H4WFJP8

View file

@ -0,0 +1,26 @@
class Solution {
private data class Acc(var used: Int, var start: Int, val max: Int) {
constructor() : this(0, 0, 0)
fun update(
nums: IntArray,
end: IndexedValue<Int>,
): Acc {
// shrink from left until conflict gets resolved
while (used.and(end.value) != 0) {
used = used.xor(nums[start])
++start
}
return copy(
used = used.or(end.value),
max = maxOf(max, end.index - start + 1),
)
}
}
fun longestNiceSubarray(nums: IntArray): Int =
nums.withIndex().fold(Acc()) { acc, end ->
acc.update(nums, end)
}.max
}