Skip to content

Commit 8e0d896

Browse files
authored
Create 2106.Maximum-Fruits-Harvested-After-at-Most-K-Steps.cpp
1 parent 4523734 commit 8e0d896

File tree

1 file changed

+65
-0
lines changed

1 file changed

+65
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
class Solution {
2+
public:
3+
int maxTotalFruits(vector<vector<int>>& fruits, int startPos, int k)
4+
{
5+
int n = fruits.size();
6+
vector<int>pos(n);
7+
vector<int>val(n);
8+
for (int i=0; i<n; i++)
9+
{
10+
pos[i] = fruits[i][0];
11+
val[i] = fruits[i][1];
12+
}
13+
vector<int>presum(n);
14+
int cur = 0;
15+
for (int i=0; i<n; i++)
16+
{
17+
cur += val[i];
18+
presum[i] = cur;
19+
}
20+
21+
int ret = 0;
22+
int j = 0;
23+
while (j<n && pos[j]<startPos) j++;
24+
for (int i=0; i<n && pos[i]<=startPos; i++)
25+
{
26+
while (j<n && (startPos-pos[i]+(pos[j]-startPos)*2) <= k)
27+
{
28+
ret = max(ret, presum[j] - (i==0 ? 0:presum[i-1]));
29+
j++;
30+
}
31+
}
32+
33+
j = n-1;
34+
while (j>=0 && pos[j]>startPos) j--;
35+
for (int i=n-1; i>=0 && pos[i]>=startPos; i--)
36+
{
37+
while (j>=0 && (pos[i]-startPos+(startPos-pos[j])*2 <=k))
38+
{
39+
40+
ret = max(ret, presum[i] - (j==0?0:presum[j-1]));
41+
j--;
42+
}
43+
}
44+
45+
int i = upper_bound(pos.begin(), pos.end(), startPos) - pos.begin()-1;
46+
int sum = 0;
47+
while (i>=0 && startPos-pos[i]<=k)
48+
{
49+
sum += val[i];
50+
i--;
51+
}
52+
ret = max(ret, sum);
53+
54+
i = lower_bound(pos.begin(), pos.end(), startPos) - pos.begin();
55+
sum = 0;
56+
while (i<n && pos[i]-startPos<=k)
57+
{
58+
sum += val[i];
59+
i++;
60+
}
61+
ret = max(ret, sum);
62+
63+
return ret;
64+
}
65+
};

0 commit comments

Comments
 (0)