862. Shortest Subarray with Sum at Least K
Input: A = [1], K = 1
Output: 1Input: A = [1,2], K = 4
Output: -1Input: A = [2,-1,2], K = 3
Output: 3// O(nlogn) Min Heap
int shortestSubarray(vector<int>& A, int K) { // time: O(nlogn); space: O(n)
int n = A.size(), res = numeric_limits<int>::max(), sum = 0;
priority_queue<pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > > pq;
for (int i = 0; i < n; ++i) {
sum += A[i];
if (sum >= K) res = min(res, i + 1);
while (!pq.empty() && sum - pq.top().first >= K) {
res = min(res, i - pq.top().second);
pq.pop();
}
pq.push({sum, i});
}
return res == numeric_limits<int>::max() ? -1 : res;
}Last updated