• 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

     
    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    win10系统设置指定程序开机自启
    PyCharm 2020.1 x64 专业版破解【亲测有效】
    xampp_mysql数据库root登录报错1045-Access denied for user 'root'@'localhost' (using password:YES)
    关于 Tomcat 启动时,解决控制台输出日志乱码问题的方案
    1.css选择器
    5.canvas
    4.音频与视频
    3.form表单
    淘宝店铺设计
    2.html5新布局元素
  • 原文地址:https://www.cnblogs.com/h-hkai/p/9939890.html
Copyright © 2020-2023  润新知