1
class Solution {
2
public:
3
int maxValueAfterReverse(vector<int> &nums) {
4
int original = 0;
5
for (int i = 0; i < nums.size() - 1; ++i) {
6
original += abs(nums[i] - nums[i + 1]);
7
}
8
int ans = original;
9
int a1 = INT_MAX;
10
int a2 = INT_MAX;
11
int a3 = INT_MIN;
12
int a4 = INT_MIN;
13
int n = nums.size();
14
for (int i = n - 2; i >= 1; --i) {
15
int old = nums[i - 1];
16
int now = nums[i];
17
if (i != n - 2) {
18
int y1 = (nums[i - 1] + nums[i]) - abs(old - now) - a1 + original;
19
int y2 = (nums[i - 1] - nums[i]) - abs(old - now) - a2 + original;
20
int y3 = (nums[i] - nums[i - 1]) - abs(old - now) + a3 + original;
21
int y4 = -(nums[i - 1] + nums[i]) - abs(old - now) + a4 + original;
22
ans = max(max(y4, max(y1, max(y2, y3))), ans);
23
}
24
a1 = min(a1, nums[i] + nums[i + 1] + abs(nums[i] - nums[i + 1]));
25
a2 = min(a2, nums[i] - nums[i + 1] + abs(nums[i] - nums[i + 1]));
26
a3 = max(a3, nums[i] - nums[i + 1] - abs(nums[i] - nums[i + 1]));
27
a4 = max(a4, nums[i] + nums[i + 1] - abs(nums[i] - nums[i + 1]));
28
ans = max(ans, -abs(old - now) + abs(old - nums[nums.size() - 1] + original));
29
}
30
for (int i = 1; i < n - 1; ++i) {
31
ans = max(ans, -abs(nums[i] - nums[i + 1]) + abs(nums[0] - nums[i + 1]) + original);
32
}
33
return ans;
34
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0