862. Shortest Subarray with Sum at Least K

Difficulty:
Related Topics:
Similar Questions:

    Problem

    Given an integer array nums and an integer k, return **the length of the shortest non-empty *subarray* of nums with a sum of at least **k. If there is no such *subarray*, return -1.

    A subarray is a contiguous part of an array.

      Example 1:

    Input: nums = [1], k = 1
    Output: 1
    

    Example 2:

    Input: nums = [1,2], k = 4
    Output: -1
    

    Example 3:

    Input: nums = [2,-1,2], k = 3
    Output: 3
    

      Constraints:

    Solution

    class Solution {
        public int shortestSubarray(int[] nums, int k) {
            Deque<long[]> dq = new ArrayDeque<>();
            dq.offer(new long[] {-1, 0});
            int i = 0;
            long curSum = 0;
            int res = Integer.MAX_VALUE;
            while (i < nums.length) {
                curSum += nums[i];
                while (!dq.isEmpty() && dq.peekFirst()[1] <= curSum - k) {
                    res = Math.min(res, (int) (i - dq.pollFirst()[0]));
                }
                while (!dq.isEmpty() && dq.peekLast()[1] >= curSum) {
                    dq.pollLast();
                }
                dq.offerLast(new long[] {i, curSum});
                i++;
            }
            return res == Integer.MAX_VALUE ? -1 : res;
        }
    }
    

    Explain:

    nope.

    Complexity: