Maximum absolute difference of value and index sums in C


We are given with an array of integers. The task is to calculate the maximum absolute difference of value and index sums. That is for each pair of indexes (i,j) in an array, we have to calculate | Arr[i] - A[j] | + |i-j| and find the maximum such sum possible. Here |A| means absolute value of A. If array has 4 elements then indexes are 0,1,2,3 and unique pairs will be ( (0,0), (1,1), (2,2), (3,3), (0,1), (0,2), (0,3), (1,2), (1,3), (2,3) ).

Input − Arr[] = { 1,2,4,5 }

Output − Maximum absolute difference of value and index sums − 7

Explanation − Index pairs and | A[i]-A[j] | + | i-j | are as follows

1. (0,0), (1,1), (2,2), (3,3)--------- |i-j| for each is 0.
2. (0,1)---------- |1-2| + |0-1|= 1+1 = 2
3. (0,2)---------- |1-4| + |0-2|= 3+2 = 5
4. (0,3)---------- |1-5| + |0-3|= 4+3 = 7
5. (1,2)---------- |2-4| + |1-2|= 2+1 = 3
6. (1,3)---------- |2-5| + |1-3|= 3+2 = 5
7. (2,3)---------- |4-5| + |2-3|= 1+1 = 2
Maximum value of such a sum is 7.

Input − Arr[] = { 10,20,21 }

Output − Maximum absolute difference of value and index sums − 13

Explanation − Index pairs and | A[i]-A[j] | + | i-j | are as follows

1. (0,0), (1,1), (2,2)--------- |i-j| for each is 0.
2. (0,1)---------- |10-20| + |0-1|= 10+1 = 11
3. (0,2)---------- |10-21| + |0-2|= 11+2 = 13
4. (1,2)---------- |20-21| + |1-2|= 1+1 = 2
Maximum value of such a sum is 13.

Approach used in the below program is as follows

  • We take an integer array having numbers as Arr[]

  • The function maxabsDiff( int arr[],int n) is used to calculate the maximum absolute difference of value and index sums..

  • We initialize the variable result with -1.

  • Inside the for loop traverse the array of integers from the beginning.

  • In nested for loop traverse the remaining elements and calculate the absolute sum of element value and indexes i,j (abs(arr[i] - arr[j]) + abs(i - j)) and store in a variable say absDiff.

  • If this new calculated sum is more than the previous one then store it in ‘result’.

  • Return result after traversing the whole array.

Example

 Live Demo

#include <stdio.h>
#include <math.h>
// Function to return maximum absolute difference
int maxabsDiff(int arr[], int n){
   int result = 0;
   for (int i = 0; i < n; i++) {
      for (int j = i; j < n; j++) {
         int absDiff= abs(arr[i] - arr[j]) + abs(i - j);
         if (absDiff > result)
            result = absDiff;
      }
   }
   return result;
}
int main(){
   int Arr[] = {1,2,4,1,3,4,2,5,6,5};
   printf("Maximum absolute difference of value and index sums: %d", maxabsDiff(Arr,10));
   return 0;
}

Output

If we run the above code it will generate the following output −

Maximum absolute difference of value and index sums: 13

Updated on: 17-Aug-2020

649 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements