# Reduce the array to a single element with the given operation

Given an integer N and an array arr containing integers from 1 to N in sorted fashion. The task is to reduce the array to a single element by performing the following operation:
All the elements at the odd positions will be removed after a single operation, this operation will be performed until only a single element is left int the array and print that element in the end.

Examples:

Input: N = 3
Output: 2
Initially the array will be arr[] = {1, 2, 3}
After 1st operation, ‘1’ and ‘3’ will be removed and the array becomes arr[] = {2}
So 2 is the only element left at the end.

Input: N = 6
Output: 4
arr[] = {1, 2, 3, 4, 5, 6}
After first iteration, array becomes {2, 4, 6}
After second iteration, array becomes {4}
So 4 is the last element.

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

Approach: For this kind of problem:

• Write multiple test cases and the respective output.
• Analyze the output for the given input and the relation between them.
• Once we find the relation we will try to express it in the form of mathematical expression if possible.
• Write the code/algorithm for the above expression.

So let’s create a table for the given input N and its respective output

Input(N) Output
3 2
4 4
6 4
8 8
12 8
20 16

Analyzed Relation: The output is in 2i. Using the above table we can create the output table for the range of inputs

Input(N) Output
2-3 2
4-7 4
8-15 8
16-31 16
32-63 32
2i – 2i + 1 – 1 2i

Below is the implementation of the above approach:

## C++

 `// C++ implementation of the approach  ` ` `  `#include ` `using` `namespace` `std; ` ` `  `// Function to return the final element  ` `long` `getFinalElement(``long` `n)  ` `{  ` `    ``long` `finalNum;  ` `    ``for` `(finalNum = 2; finalNum * 2 <= n; finalNum *= 2)  ` `            ``;  ` `    ``return` `finalNum;  ` `}  ` ` `  ` `  `// Driver code ` `int` `main() ` `{ ` `       ``int` `N = 12;  ` `    ``cout << getFinalElement(N) ; ` `    `  `   ``return` `0; ` `} ` `// This code is contributed by Ryuga `

## Java

 `// Java implementation of the approach ` `class` `OddPosition { ` ` `  `    ``// Function to return the final element ` `    ``public` `static` `long` `getFinalElement(``long` `n) ` `    ``{ ` `        ``long` `finalNum; ` `        ``for` `(finalNum = ``2``; finalNum * ``2` `<= n; finalNum *= ``2``) ` `            ``; ` `        ``return` `finalNum; ` `    ``} ` ` `  `    ``// Driver code ` `    ``public` `static` `void` `main(String[] args) ` `    ``{ ` `        ``int` `N = ``12``; ` `        ``System.out.println(getFinalElement(N)); ` `    ``} ` `} `

## Python3

 `# Python 3 implementation of the approach  ` ` `  `# Function to return the final element  ` `def` `getFinalElement(n): ` ` `  `    ``finalNum ``=` `2` `    ``while` `finalNum ``*` `2` `<``=` `n:  ` `        ``finalNum ``*``=` `2` `    ``return` `finalNum ` ` `  `# Driver code ` `if` `__name__ ``=``=``"__main__"``: ` ` `  `    ``N ``=` `12` `    ``print``( getFinalElement(N)) ` ` `  `# This code is contributed  ` `# by ChitraNayal `

## C#

 `// C# implementation of the approach ` `using` `System; ` ` `  `public` `class` `GFG{ ` `     `  `    ``// Function to return the final element ` `    ``public` `static` `long` `getFinalElement(``long` `n) ` `    ``{ ` `        ``long` `finalNum; ` `        ``for` `(finalNum = 2; finalNum * 2 <= n; finalNum *= 2) ` `            ``; ` `        ``return` `finalNum; ` `    ``} ` ` `  `    ``// Driver code ` `    ``static` `public` `void` `Main (){ ` `        ``int` `N = 12; ` `        ``Console.WriteLine(getFinalElement(N)); ` `    ``} ` `} `

## PHP

 ` `

Output:

```8
```

My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.