Skip to content

Commit 2fa15e0

Browse files
authored
Create maximum-fruits-harvested-after-at-most-k-steps.cpp
1 parent f61c754 commit 2fa15e0

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// Time: O(n)
2+
// Space: O(n)
3+
4+
class Solution {
5+
public:
6+
int maxTotalFruits(vector<vector<int>>& fruits, int startPos, int k) {
7+
const int max_pos = max(startPos, fruits.back()[0]);
8+
vector<int> cnt(max_pos + 1);
9+
for (const auto& x : fruits) {
10+
cnt[x[0]] += x[1];
11+
}
12+
vector<int> prefix(1);
13+
for (int i = 0; i < size(cnt); ++i) {
14+
prefix.emplace_back(prefix.back() + cnt[i]);
15+
}
16+
int result = 0;
17+
for (int left_dist = 0; left_dist <= min(startPos, k); ++left_dist) {
18+
const int right_dist = max(k - 2 * left_dist, 0);
19+
const int left = startPos - left_dist;
20+
const int right = min(startPos + right_dist, max_pos);
21+
result = max(result, prefix[right + 1] - prefix[left]);
22+
}
23+
for (int right_dist = 0; right_dist <= min(max_pos - startPos, k); ++right_dist) {
24+
const int left_dist = max(k - 2 * right_dist, 0);
25+
const int left = max(startPos - left_dist, 0);
26+
const int right = startPos + right_dist;
27+
result = max(result, prefix[right + 1] - prefix[left]);
28+
}
29+
return result;
30+
}
31+
};

0 commit comments

Comments
 (0)