862. Shortest Subarray with Sum at Least K

Posted ruruozhenhao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了862. Shortest Subarray with Sum at Least K相关的知识,希望对你有一定的参考价值。

Return the length of the shortest, non-empty, contiguous subarray of A with sum at least K.

If there is no non-empty subarray with sum at least K, return -1.

 

Example 1:

Input: A = [1], K = 1
Output: 1

Example 2:

Input: A = [1,2], K = 4
Output: -1

Example 3:

Input: A = [2,-1,2], K = 3
Output: 3

 

Note:

  1. 1 <= A.length <= 50000
  2. -10 ^ 5 <= A[i] <= 10 ^ 5
  3. 1 <= K <= 10 ^ 9

 

Approach #1: prefix sum. [Time Limit Exceeded]

class Solution {
public:
    int shortestSubarray(vector<int>& A, int K) {
        int len = A.size();
        if (len == 1 && A[0] >= K) return 1;
        int step = INT_MAX;
        vector<int> prefixSum(len, 0);
        prefixSum[0] = A[0];
        for (int i = 1; i < len; ++i)
            prefixSum[i] = prefixSum[i-1] + A[i];
        for (int i = 0; i < len; ++i) {
            if (prefixSum[i] >= K) 
                step = min(step, i+1);
            for (int j = i+1; j < len; ++j) {
                if (prefixSum[j]-prefixSum[i] >= K) {
                    step = min(step, j-i);
                }
            }
        }
        if (step == INT_MAX) return -1;
        else return step;
    }
};

  

Approach #2:  deque.

class Solution {
public:
    int shortestSubarray(vector<int>& A, int K) {
        int len = A.size();
        int res = len + 1;
        vector<int> sum(len+1, 0);
        for (int i = 0; i < len; ++i)
            sum[i+1] = sum[i] + A[i];
        deque<int> d;
        for (int i = 0; i < len+1; ++i) {
            while (!d.empty() && sum[i]-sum[d.front()] >= K) 
                res = min(res, i-d.front()), d.pop_front();
            while (!d.empty() && sum[i] <= sum[d.back()])
                d.pop_back();
            d.push_back(i);
        }
        return res <= len ? res : -1;
    }
};

Runtime: 144 ms, faster than 33.12% of C++ online submissions for Shortest Subarray with Sum at Least K.

 

Analysis:

deque Member functions


Iterators:

Capacity:

Element access:

Modifiers:

Allocator:

Non-member functions overloads

 

 

以上是关于862. Shortest Subarray with Sum at Least K的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode题862 —— Shortest Subarray with Sum at Least K

leetcode 862 shorest subarray with sum at least K

Shortest Unsorted Continuous Subarray

581. Shortest Unsorted Continuous Subarray

LeetCode - 581. Shortest Unsorted Continuous Subarray

581. Shortest Unsorted Continuous Subarray