Advertisement
1988coder

862. Shortest Subarray with Sum at Least K

Nov 18th, 2018
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.01 KB | None | 0 0
  1. /*
  2. Refer: https://leetcode.com/problems/shortest-subarray-with-sum-at-least-k/discuss/143726/C++JavaPython-O(N)-Using-Deque
  3. Using prefix array
  4. Time Complexity: O(n)
  5. Space Complexity: O(n)
  6. */
  7. class Solution {
  8.     public int shortestSubarray(int[] A, int K) {
  9.         if (A == null || A.length == 0) {
  10.             return -1;
  11.         }
  12.         int n = A.length;
  13.         int result = n+1;
  14.         int[] prefixArr = new int[n+1];
  15.         for (int i = 0; i < n; i++) {
  16.             prefixArr[i+1] = prefixArr[i] + A[i];
  17.         }
  18.         Deque<Integer> deque = new LinkedList();
  19.         for (int i = 0; i < n+1; i++) {
  20.             while (!deque.isEmpty() && prefixArr[i] - prefixArr[deque.peekFirst()] >= K) {
  21.                 result = Math.min(result, i - deque.pollFirst());
  22.             }
  23.             while (!deque.isEmpty() && prefixArr[i] <= prefixArr[deque.peekLast()]) {
  24.                 deque.pollLast();
  25.             }
  26.             deque.addLast(i);
  27.         }
  28.         return result <= n ? result : -1;
  29.     }
  30. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement