📅  最后修改于: 2023-12-03 15:06:08.722000             🧑  作者: Mango
这道题目的主题是求一个长度为n的数组中每相邻两个元素之差的绝对值的和的最大值。换句话说,求最大的相邻元素之差的绝对值和。
假设数组 arr 的长度为 n,则可以考虑从数组的第二个元素开始依次计算相邻元素之差的绝对值,将其累加起来即可。代码如下:
int maxAbsoluteSum(vector<int>& arr) {
int n = arr.size();
int res = 0, maxDiff = abs(arr[0] - arr[1]);
for (int i = 1; i < n; i++) {
res += abs(arr[i] - arr[i-1]);
maxDiff = max(maxDiff, abs(arr[i] - arr[i-1]));
}
return res - maxDiff;
}
其中,变量 res
用于记录相邻元素之差的绝对值的和,变量 maxDiff
用于记录相邻元素之差的最大值。在每次更新 res
的同时,判断当前相邻元素之差的绝对值是否大于 maxDiff
,如果是,则更新 maxDiff
。最后,返回 res - maxDiff
即可。
由于只需要遍历一次数组,因此时间复杂度为 O(n)。
由于只需要常数级别的额外空间来存储变量,因此空间复杂度为 O(1)。
int maxAbsoluteSum(vector<int>& arr) {
int n = arr.size();
int res = 0, maxDiff = abs(arr[0] - arr[1]);
for (int i = 1; i < n; i++) {
res += abs(arr[i] - arr[i-1]);
maxDiff = max(maxDiff, abs(arr[i] - arr[i-1]));
}
return res - maxDiff;
}