返回 A 的最短的非空连续子数组的长度,该子数组的和至少为 K 。
如果没有和至少为 K 的非空子数组,返回 -1 。
import java.util.LinkedList;
class Solution {
public static int shortestSubarray(int[] nums, int k) {
long[] sum = new long[nums.length + 1];
for (int i = 1; i <= nums.length; ++i) {
sum[i] = sum[i - 1] + nums[i - 1];
}
LinkedList<Integer> queue = new LinkedList<>();
int ret = Integer.MAX_VALUE;
for (int i = 0; i < sum.length; ++i) {
while (!queue.isEmpty() && sum[i] - sum[queue.peekFirst()] >= k) {
ret = Math.min(ret, i - queue.pollFirst());
}
while (!queue.isEmpty() && sum[queue.peekLast()] >= sum[i]) {
queue.pollLast();
}
queue.offerLast(i);
}
return ret == Integer.MAX_VALUE ? -1 : ret;
}
}