Matej Focko
8a7c5f0a84
URL: https://leetcode.com/problems/shortest-subarray-with-sum-at-least-k/ Signed-off-by: Matej Focko <me@mfocko.xyz>
42 lines
1.1 KiB
Kotlin
42 lines
1.1 KiB
Kotlin
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
|
|
}
|
|
}
|