 Open in App
Not now

# Find last remaining element after reducing the Array

• Difficulty Level : Easy
• Last Updated : 04 Jan, 2023

Given an array arr[] of size N and an integer K. The task is to find the last remaining element in the array after reducing the array. The rules for reducing the array are:

• The first and last element say X and Y are chosen and removed from the array arr[].
• The values X and Y are added. Z = X + Y.
• Insert the value of Z % K into the array arr[] at the position ((N/2) + 1)th position, where N denotes the current length of the array.

Examples:

Input: N = 5, arr[] = {1, 2, 3, 4, 5}, K = 7
Output:
Explanation:
The given array arr[] reduces as follows:
{1, 2, 3, 4, 5} -> {2, 6, 3, 4}
{2, 6, 3, 4} -> {6, 6, 3}
{6, 6, 3} -> {2, 6}
{2, 6} -> {1}
The last element of A is 1.
Input: N = 5, arr[] = {2, 4, 7, 11, 3}, K = 12
Output:
Explanation:
The given array arr[] reduces as follows:
{2, 4, 7, 11, 3} -> {4, 5, 7, 11}
{4, 5, 7, 11} -> {5, 3, 7}
{5, 3, 7} -> {0, 3}
{0, 3} -> {3}
The last element of A is 3.

Naive approach: The naive approach for this problem is that at every step, find the first element and last element in the array and compute (X + Y) % K where X is the first element and Y is the last element of the array at every step. After computing this value, insert this value at the given position.
Time Complexity: O(N2)
Efficient Approach:

• On observing carefully, it can be said that the sum of the elements of the array modulo K is never changed in the array throughout.
• This is because we are basically inserting the value X + Y % K back into the array.
• Therefore, this problem can be solved in linear time by directly finding the sum of the array and finding the value sum % K.

Below is the implementation of the above approach:

## C++

 `// C++ program to find the value of the``// reduced Array by reducing the array``// based on the given conditions` `#include ``using` `namespace` `std;` `// Function to find the value of the``// reduced Array by reducing the array``// based on the given conditions``int` `find_value(``int` `a[], ``int` `n, ``int` `k)``{``    ``// Variable to store the sum``    ``int` `sum = 0;` `    ``// For loop to iterate through the``    ``// given array and find the sum``    ``for` `(``int` `i = 0; i < n; i++) {``        ``sum += a[i];``    ``}` `    ``// Return the required value``    ``return` `sum % k;``}` `// Driver code``int` `main()``{``    ``int` `n = 5, k = 3;``    ``int` `a[] = { 12, 4, 13, 0, 5 };``    ``cout << find_value(a, n, k);``    ``return` `0;``}`

## Java

 `// Java program to find the value of the``// reduced Array by reducing the array``// based on the given conditions` `public` `class` `GFG {` `    ``// Function to find the value of the``    ``// reduced Array by reducing the array``    ``// based on the given conditions``    ``public` `static` `int` `find_value(``int` `a[], ``int` `n, ``int` `k)``    ``{``        ``// Variable to store the sum``        ``int` `sum = ``0``;` `        ``// For loop to iterate through the``        ``// given array and find the sum``        ``for` `(``int` `i = ``0``; i < n; i++) {``            ``sum += a[i];``        ``}` `        ``// Return the required value``        ``return` `sum % k;``    ``}` `    ``// Driver code``    ``public` `static` `void` `main(String[] args)``    ``{``        ``int` `n = ``5``, k = ``3``;``        ``int` `a[] = { ``12``, ``4``, ``13``, ``0``, ``5` `};``        ``System.out.println(find_value(a, n, k));``    ``}``}`

## Python3

 `# Python3 program to find the value of the``# reduced Array by reducing the array``# based on the given conditions` `# Function to find the value of the``# reduced Array by reducing the array``# based on the given conditions``def` `find_value(a, n, k):` `    ``# Variable to store the sum``    ``sum` `=` `0` `    ``# For loop to iterate through the``    ``# given array and find the sum``    ``for` `i ``in` `range``(n):``        ``sum` `+``=` `a[i]` `    ``# Return the required value``    ``return` `sum` `%` `k` `# Driver code``if` `__name__ ``=``=` `"__main__"``:``    ``n, k ``=` `5``, ``3``;``    ``a ``=` `[``12``, ``4``, ``13``, ``0``, ``5``];``    ``print``(find_value(a, n, k))`

## C#

 `// C# program to find the value of the``// reduced Array by reducing the array``// based on the given conditions``using` `System;` `class` `GFG {` `    ``// Function to find the value of the``    ``// reduced Array by reducing the array``    ``// based on the given conditions``    ``public` `static` `int` `find_value(``int` `[]a, ``int` `n, ``int` `k)``    ``{``        ``// Variable to store the sum``        ``int` `sum = 0;` `        ``// For loop to iterate through the``        ``// given array and find the sum``        ``for` `(``int` `i = 0; i < n; i++) {``            ``sum += a[i];``        ``}` `        ``// Return the required value``        ``return` `sum % k;``    ``}` `    ``// Driver code``    ``public` `static` `void` `Main(``string``[] args)``    ``{``        ``int` `n = 5, k = 3;``        ``int` `[]a = { 12, 4, 13, 0, 5 };``        ``Console.WriteLine(find_value(a, n, k));``    ``}``}` `// This code is contributed  by AnkitRai01`

## Javascript

 ``

Output

`1`

Time Complexity: O(N), where N is the length of the array.
Auxiliary Space: O(1), no extra space is required, so it is a constant.

My Personal Notes arrow_drop_up