c++
class Solution {
public:
int shortestSubarray(vector<int>& nums, int k) {
deque<int> que;
vector<long long> sum(nums.size() + 1, 0);
que.push_back(0);
for (int i = 0; i < nums.size(); i++) sum[i + 1] = sum[i] + nums[i];
int pos = -1, ans = -1;
for (int i = 0; i < sum.size(); i++) {
while (que.size() && sum[i] - sum[que.front()] >= k) {
pos = que.front();
que.pop_front();
}
if (pos != -1 && (i - pos < ans || ans == -1)) ans = i - pos;
while (que.size() && sum[que.back()] > sum[i]) que.pop_back();
que.push_back(i);
}
return ans;
}
};
js
var shortestSubarray = function(nums, k) {
var que = [0];
var sum = new Array(nums.length + 1).fill(0);
for (var i = 0; i < nums.length; i++) sum[i + 1] = sum[i] + nums[i];
var pos = -1, ans = -1;
for (var i = 0; i < sum.length; i++) {
while (que.length && sum[i] - sum[que[0]] >= k) {
pos = que[0];
que.shift();
}
if (pos != -1 && (i - pos < ans || ans == -1)) ans = i - pos;
while (que.length && sum[que[que.length - 1]] > sum[i]) que.pop();
que.push(i);
}
return ans;
};