function shortestSubarray(nums: number[], k: number): number {
const n = nums.length;
const prefixSum = new Array(n + 1);
prefixSum[0] = 0;
for (let i = 1; i <= n; i++) {
prefixSum[i] = prefixSum[i - 1] + nums[i - 1];
}
let res = n + 1;
const queue: number[] = [];
for (let i = 0; i <= n; i++) {
while (queue.length !== 0 && prefixSum[i] - prefixSum[queue[0]] >= k) {
const index = queue.shift()!;
res = Math.min(i - index, res);
}
while (queue.length !== 0 && prefixSum[i] <= prefixSum[queue[queue.length - 1]]) {
queue.pop();
}
queue.push(i);
}
return res === n + 1 ? -1 : res;
}