File tree Expand file tree Collapse file tree 1 file changed +27
-0
lines changed Expand file tree Collapse file tree 1 file changed +27
-0
lines changed Original file line number Diff line number Diff line change
1
+ // Time: O(m * n)
2
+ // Space: O(n)
3
+
4
+ class Solution {
5
+ public:
6
+ long long maxPoints (vector<vector<int >>& points) {
7
+ vector<int64_t > dp (cbegin (points[0 ]), cend (points[0 ]));
8
+ for (int i = 1 ; i < size (points); ++i) {
9
+ vector<int64_t > prefix (size (points[i]));
10
+ prefix[0 ] = dp[0 ];
11
+ for (int j = 1 ; j < size (points[i]); ++j) {
12
+ prefix[j] = max (prefix[j - 1 ], dp[j] + j);
13
+ }
14
+ vector<int64_t > suffix (size (points[i]));
15
+ suffix.back () = dp.back () - (size (points[i]) - 1 );
16
+ for (int j = size (points[i]) - 2 ; j >= 0 ; --j) {
17
+ suffix[j] = max (suffix[j + 1 ], dp[j] - j);
18
+ }
19
+ vector<int64_t > new_dp (size (points[i]));
20
+ for (int j = 0 ; j < size (points[i]); ++j) {
21
+ new_dp[j] = max (prefix[j] - j, suffix[j] + j) + points[i][j];
22
+ }
23
+ dp = move (new_dp);
24
+ }
25
+ return *max_element (cbegin (dp), cend (dp));
26
+ }
27
+ };
You can’t perform that action at this time.
0 commit comments