未排序数组中累加和大于或等于给定值的最短子数组长度

链接

返回 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;
    }
}
上一篇:集合——LinkedList


下一篇:Java中ArrayList和LinkedList区别