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

以上是 C ++中绝对值表达式的最大值 的全部内容, 来源链接: utcz.com/z/345468.html

回到顶部