leetcodeSolution to some Leetcode problems written in C++ |
git clone git://git.dimitrijedobrota.com/leetcode.git |
Log | Files | Refs | README | LICENSE |
0862.cpp (1344B)
0 // Priority queue
1 class Solution {
2 public:
3 int shortestSubarray(const vector<int> &nums, int k) const {
4 const int n = size(nums);
5 long long acc = 0;
6 uint res = -1;
8 using type_t = pair<long long, int>;
9 priority_queue<type_t, vector<type_t>, greater<>> pq;
11 for (uint i = 0; i < n; i++) {
12 acc += nums[i];
14 if (acc >= k) res = min(res, i + 1);
15 while (!pq.empty() && acc - pq.top().first >= k) {
16 res = min(res, i - pq.top().second);
17 pq.pop();
18 }
20 pq.emplace(acc, i);
21 }
23 return res;
24 }
25 };
27 // Deque optimization
28 class Solution {
29 public:
30 int shortestSubarray(const vector<int> &nums, int k) const {
31 static long long prfx[100001];
32 for (int i = 0; i < size(nums); i++) {
33 prfx[i + 1] = prfx[i] + nums[i];
34 }
36 uint res = -1;
37 deque<int> dq;
38 for (uint i = 0; i <= size(nums); i++) {
39 while (!dq.empty() && prfx[i] - prfx[dq.front()] >= k) {
40 res = min(res, i - dq.front());
41 dq.pop_front();
42 }
44 while (!dq.empty() && prfx[i] <= prfx[dq.back()]) {
45 dq.pop_back();
46 }
48 dq.push_back(i);
49 }
51 return res;
52 }
53 };