码迷,mamicode.com
首页 > 其他好文 > 详细

862. Shortest Subarray with Sum at Least K

时间:2018-11-10 18:01:24      阅读:244      评论:0      收藏:0      [点我收藏+]

标签:maximum   iterator   fas   ref   miss   ESS   data   ssi   array   

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

标签:maximum   iterator   fas   ref   miss   ESS   data   ssi   array   

原文地址:https://www.cnblogs.com/ruruozhenhao/p/9939890.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!