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 := -∞, minVal := ∞
对于i从0到v的大小
minVal := v[i]和minVal的最小值
maxVal := v[i]和maxVal的最大值
返回maxVal – minVal
在主方法中,执行以下操作:
创建一个大小为4的数组ret
n := arr1的大小
对于i从0到n – 1
将arr1[i] – arr2[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 := -∞
对于i从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
广告