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:
parent
aec179520a
commit
790eeb39ef
1 changed files with 26 additions and 0 deletions
26
kt/longest-nice-subarray.kt
Normal file
26
kt/longest-nice-subarray.kt
Normal 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
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue