C ++中绝对值表达式的最大值
假设我们有两个长度相等的整数数组,我们必须找到以下项的最大值:|arr1[i]-arr1[j]|+|arr2[i]-arr2[j]|+|i-j|。最大值取全部0<=i,j<arr1.length。因此,如果给定的两个数组是[1,2,3,4]和[-1,4,5,6],则输出将为13。
为了解决这个问题,我们将遵循以下步骤-
定义一个名为getVal的方法,该方法将使用数组v
maxVal:=-inf,minVal:=inf
对于介于0到v大小的i
minVal:=v[i]和minVal的最小值
maxVal:=v[i]和maxVal的最大值
返回maxVal–minVal
在主要方法中,执行以下操作
制作大小为4的数组ret
n:=arr1的大小
对于i,范围为0至n–1
将rr1[i]–rr2[i]+i插入ret[0]
将arr1[i]+arr2[i]+i插入ret[1]
将arr1[i]–arr2[i]-i插入ret[2]
将arr1[i]+arr2[i]-i插入ret[3]
ans:=-inf
对于我0到3的范围
ans:=ans和getVal(ret[i])的最大值
返回ans
让我们看下面的实现以更好地理解-
示例
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int getVal(vector <int>& v){
int maxVal = INT_MIN;
int minVal = INT_MAX;
for(int i = 0; i < v.size(); i++){
minVal = min(v[i], minVal);
maxVal = max(v[i], maxVal);
}
return maxVal - minVal;
}
int maxAbsValExpr(vector<int>& arr1, vector<int>& arr2) {
vector <int> ret[4];
int n = arr1.size();
for(int i = 0; i < n; i++){
ret[0].push_back(arr1[i] - arr2[i] + i);
ret[1].push_back(arr1[i] + arr2[i] + i);
ret[2].push_back(arr1[i] - arr2[i] - i);
ret[3].push_back(arr1[i] + arr2[i] - i);
}
int ans = INT_MIN;
for(int i = 0; i < 4; i++){
ans = max(ans, getVal(ret[i]));
}
return ans;
}
};
main(){
vector<int> v1 = {1,2,3,4}, v2 = {-1, 4, 5, 6};
Solution ob;
cout << (ob.maxAbsValExpr(v1, v2));
}输入值
[1,2,3,4] [-1,4,5,6]
输出结果
13