Skip to content

Commit 238e118

Browse files
authored
Create 2106.Maximum-Fruits-Harvested-After-at-Most-K-Steps_v2.cpp
1 parent a3b4e1f commit 238e118

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
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>presum(n);
8+
for (int i=0; i<n; i++)
9+
{
10+
pos[i] = fruits[i][0];
11+
presum[i] = (i==0?0:presum[i-1]) + fruits[i][1];
12+
}
13+
14+
int ret = 0;
15+
for (int i=0; i<n; i++)
16+
{
17+
if (pos[i]<=startPos)
18+
{
19+
double d = k - (startPos-pos[i]);
20+
if (d<0) continue;
21+
int j = upper_bound(pos.begin(), pos.end(), startPos+d/2) - pos.begin() - 1;
22+
if (j>=0 && j<n)
23+
ret = max(ret, presum[j] - (i==0?0:presum[i-1]));
24+
}
25+
else
26+
{
27+
double d = k - (pos[i]-startPos);
28+
if (d<0) continue;
29+
int j = lower_bound(pos.begin(), pos.end(), startPos-d/2) - pos.begin();
30+
if (j>=0 && j<n)
31+
ret = max(ret, presum[i]- (j==0?0:presum[j-1]));
32+
}
33+
}
34+
return ret;
35+
}
36+
};

0 commit comments

Comments
 (0)