| arr [i] – arr [j]-+ | i – j |的最大值 在C ++中

在这个问题中,我们得到了n个整数的数组。我们的任务是创建一个程序,该程序将查找| arr [i] -arr [j] |的最大值。+ | ij |。

让我们举个例子来了解这个问题,

输入-数组= {4,1,2}

输出-4

说明-

|arr[0] - arr[1]|+|0-1| = |4-1| + |-1| = 3+1 = 4

|arr[0] - arr[2]|+|0-2| = |4-2| + |-2| = 2+2 = 4

|arr[1] - arr[2 ]|+|1-2| = |1-2| + |1-2| = 1+1 = 2

为了解决这个问题,一种简单的方法是使用蛮力方法,该方法将使用两个循环并找到最大差值。

但是有效的方法将是使用绝对函数的属性,

让我们对方程进行解码并找到解决方案,

arr[i] - arr[j] + i - j = (arr[i] + i) - (arr[j] + j)

arr[i] - arr[j] - i + j = (arr[i] - i) - (arr[j] - j)

-arr[i] + arr[j] + i - j = -{(arr[i]-i) -(arr[j]-j)}

-arr[i] + arr[j] - i + j = -{(arr[i]+i) - (arr[j]+j)}

第一和第四相同,第二和第四相同。使用此方法,我们将创建两个数组,这些数组将存储值arr [i] +-i。

array1将存储值arr [i] + i

array2将存储值arr [i]-i

因此,我们将找到两个值中的最大值

最大((max(array1)-min(array1)),(max(array2)-min(array2)))

示例

显示我们解决方案实施情况的程序,

#include<iostream>

using namespace std;

int maxDiff(int arr[], int n) {

   int ans = 0;

   for (int i = 0; i < n; i++)

      for (int j = 0; j < n; j++)

         ans = max(ans, abs(arr[i] - arr[j]) + abs(i - j));

   return ans;

}

int main() {

   int array[] = { 5, 7, 1, 2 };

   int n = sizeof(array) / sizeof(array[0]);

   cout<<"The maximum value of |arr[i] - arr[j]| + |i-j| is "<<maxDiff(array, n);

   return 0;

}

输出结果

The maximum value of |arr[i] - arr[j]| + |i-j| is 7

以上是 | arr [i] – arr [j]-+ | i – j |的最大值 在C ++中 的全部内容, 来源链接: utcz.com/z/353433.html

回到顶部