kt: add «862. Shortest Subarray with Sum at Least K»

URL:	https://leetcode.com/problems/shortest-subarray-with-sum-at-least-k/
Signed-off-by: Matej Focko <me@mfocko.xyz>
This commit is contained in:
Matej Focko 2024-11-17 20:40:55 +01:00
parent 1524366e77
commit 8a7c5f0a84
Signed by: mfocko
SSH key fingerprint: SHA256:icm0fIOSJUpy5+1x23sfr+hLtF9UhY8VpMC7H4WFJP8

View file

@ -0,0 +1,42 @@
class Solution {
fun shortestSubarray(
nums: IntArray,
k: Int,
): Int {
val sums =
nums
.scan(0L) { runningSum, x ->
runningSum + x.toLong()
}
.toList()
val candidates = ArrayDeque<Int>()
return (0..nums.size)
.map { i ->
var shortestLength = Int.MAX_VALUE
while (
candidates.isNotEmpty() &&
sums[i] - sums[candidates.first()] >= k
) {
shortestLength =
listOf(
shortestLength, i - candidates.removeFirst(),
).min()
}
while (
candidates.isNotEmpty() &&
sums[i] <= sums[candidates.last()]
) {
candidates.removeLast()
}
candidates.add(i)
shortestLength
}
.filter { it < Int.MAX_VALUE }
.minOrNull() ?: -1
}
}