# 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
Related Articles