# Rearrange given Array such that each elements is not equal to mean of adjacent elements

• Difficulty Level : Hard
• Last Updated : 25 Aug, 2021

Given an array arr consisting of N unique integers, the task is to rearrange the array such that element at index i of array should not be mean of adjacent elements (i.e., of index i-1 and i+1). Any possible rearrangement can be returned.

Example:

Input:  arr = [5, 4, 3, 2, 1]
Output:  [5, 3, 4, 2, 1]
Explanation: In the input array:
Mean(5, 3) = (5 + 3)/2 = 4,
Mean(4, 2) = (4+ 2 )/2 = 3,
Mean(3, 1) = (3 + 1)/2 = 2.
After rearranging the array as [5, 3, 4, 2, 1], now no element is the mean of adjacent elements: (5 + 4)/2 ≠ 3, (3 + 2)/2 ≠ 4, (4 + 1)/2 ≠ 2

Input: arr = [6, 9, 12, 25, 50 75]
Output:  [6, 12, 9, 25, 50, 75 ]

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach: The main observation to solve this problem is that for 3 numbers a, b, and c to satisfy the condition that b shouldn’t be the mean of a and c, [a, b, c] mustn’t be sorted. Therefore, this problem can be solved by following steps:

• Iterate over the array from 1 to (N-1)
• Check whether (arr[i – 1] + arr[i + 1]) / 2 == arr[i])
• If the condition is satisfied swap the elements arr[i] and arr[i+1]

Below is the implementation of the above approach:

## C++

 `// C++ code for above implementation``#include ``using` `namespace` `std;` `// Function to rearrange the array``void` `Rearrange(``int` `arr[], ``int` `N)``{` `    ``// Iterating for array``    ``for` `(``int` `i = 1; i < (N - 1); i++) {` `        ``// Checking whether the element i``        ``// is mean of i-1 and i+1``        ``if` `((arr[i - 1] + arr[i + 1]) / 2 == arr[i]) {` `            ``// Rearrange by swapping arr[i] and arr[i+1]``            ``swap(arr[i], arr[i + 1]);``        ``}``    ``}` `    ``// Printing the output array``    ``for` `(``int` `i = 0; i < N; i++) {``        ``cout << arr[i] << ``" "``;``    ``}``}`  `// Driver code``int` `main()``{``    ``int` `arr[] = { 6, 9, 12, 25, 50, 75 };``    ``int` `N = ``sizeof``(arr) / ``sizeof``(``int``);` `    ``// calling the function``    ``Rearrange(arr, N);``    ``return` `0;``}`

## Java

 `// Java program for the above approach` `import` `java.io.*;` `class` `GFG {``  ``// Function to rearrange the array``  ` `static` `void` `Rearrange(``int` `arr[], ``int` `N)``{``  ` `    ``// Iterating for array``    ``for` `(``int` `i = ``1``; i < (N - ``1``); i++) {``  ` `        ``// Checking whether the element i``        ``// is mean of i-1 and i+1``        ``if` `((arr[i - ``1``] + arr[i + ``1``]) / ``2` `== arr[i]) {``  ` `            ``// Rearrange by swapping arr[i] and arr[i+1]``           ` `          ``int` `temp = arr[i];``        ``arr[i] = arr[i + ``1``];``        ``arr[i + ``1``] = temp;``        ``}``    ``}``  ` `    ``// Printing the output array``    ``for` `(``int` `i = ``0``; i < N; i++) {``         ``System.out.print(arr[i] +``" "``);``    ``}``}``  ` `// Driver code``    ``public` `static` `void` `main (String[] args) {``      ``int` `arr[] = { ``6``, ``9``, ``12``, ``25``, ``50``, ``75` `};``    ``int` `N = arr.length;``  ` `    ``// calling the function``    ``Rearrange(arr, N);``    ``}``}``// This code is contributed by Potta Lokesh`

## C#

// C# program for the above approach

using System;

class GFG {
// Function to rearrange the array

static void Rearrange(int []arr, int N)
{

// Iterating for array
for (int i = 1; i < (N – 1); i++) {

// Checking whether the element i
// is mean of i-1 and i+1
if ((arr[i – 1] + arr[i + 1]) / 2 == arr[i]) {

// Rearrange by swapping arr[i] and arr[i+1]

int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}

// Printing the output array
for (int i = 0; i < N; i++) {
Console.Write(arr[i] +" ");
}
}

// Driver code
public static void Main (String[] args)
{
int []arr = { 6, 9, 12, 25, 50, 75 };
int N = arr.Length;

// calling the function
Rearrange(arr, N);
}
}
// This code is contributed by shivanisinghss2110

## Python3

 `# Python3 program for the above approach` `# Function to rearrange the array``def` `Rearrange(arr, N) :` `    ``# Iterating for array``    ``for` `i ``in` `range``(``1``, N ``-` `1``) :` `        ``# Checking whether the element i``        ``# is mean of i-1 and i+1``        ``if` `((arr[i ``-` `1``] ``+` `arr[i ``+` `1``]) ``/``/` `2` `=``=` `arr[i]) :` `            ``# Rearrange by swapping arr[i] and arr[i+1]``            ``arr[i], arr[i ``+` `1``] ``=` `arr[i ``+` `1``], arr[i];` `    ``# Printing the output array``    ``for` `i ``in` `range``(N) :``        ``print``(arr[i],end``=` `" "` `)``  `   `# Driver code``if` `__name__ ``=``=` `"__main__"` `:` `    ``arr ``=` `[ ``6``, ``9``, ``12``, ``25``, ``50``, ``75` `];``    ``N ``=` `len``(arr);` `    ``# calling the function``    ``Rearrange(arr, N);``    ` `    ``# This code is contributed by AnkThon`

## Javascript

 ``

Output

`6 12 9 25 75 50 `

Time Complexity: O(N)
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up