Skip to content
Related Articles
Get the best out of our app
GeeksforGeeks App
Open App
geeksforgeeks
Browser
Continue

Related Articles

Maximum possible middle element of the array after deleting exactly k elements

Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article

Given an integer array of size n and a number k. If the indexing is 1 based then the middle element of the array is the element at index (n + 1) / 2, if n is odd otherwise n / 2. The task is to delete exactly k elements from the array in such a way that the middle element of the reduced array is as maximum as possible. Find the maximum possible middle element of the array after deleting exactly k elements.
Examples: 
 

Input :
n = 5, k = 2
arr[] = {9, 5, 3, 7, 10};
Output : 7

Input :
n = 9, k = 3
arr[] = {2, 4, 3, 9, 5, 8, 7, 6, 10};
Output : 9

In the first input, if we delete 5 and 3 then the array becomes {9, 7, 10} and
the middle element will be 7.
In the second input, if we delete one element before 9 and two elements after 9 
(for example 2, 5, 8) then the array becomes {4, 3, 9, 7, 6, 10} and middle 
element will be 9 and it will be the optimum solution.

 

Naive Approach : 
The naive approach is to check all possible solutions. There could be C(n, k) possible solutions. If we check all possible solutions to find an optimal solution, it will consume a lot of time. 
Optimal Approach : 
After deleting k elements, the array will be reduced to size n – k. Since we can delete any k numbers from the array to find the maximum possible middle elements. If we note, the index of the middle element after deleting k elements will lie in the range ( n + 1 – k ) / 2 and ( n + 1 – k ) / 2 + k. So in order to find the optimal solution, simply iterate the array from the index ( n + 1 – k ) / 2 to index ( n + 1 – k ) / 2 + k and select the maximum element in this range. 
The is the implementation is given below. 
 

C++




#include <bits/stdc++.h>
using namespace std;
 
// Function to calculate maximum possible middle
// value of the array after deleting exactly k
// elements
int maximum_middle_value(int n, int k, int arr[])
{
    // Initialize answer as -1
    int ans = -1;
 
    // Calculate range of elements that can give
    // maximum possible middle value of the array
    // since index of maximum possible middle
    // value after deleting exactly k elements from
    // array will lie in between low and high
    int low = (n + 1 - k) / 2;
 
    int high = (n + 1 - k) / 2 + k;
 
    // Find maximum element of the array in
    // range low and high
    for (int i = low; i <= high; i++) {
 
        // since indexing is 1 based so
        // check element at index i - 1
        ans = max(ans, arr[i - 1]);
    }
 
    // Return the maximum possible middle value
    //  of the array after deleting exactly k
    // elements from the array
    return ans;
}
 
// Driver Code
int main()
{
    int n = 5, k = 2;
    int arr[] = { 9, 5, 3, 7, 10 };
    cout << maximum_middle_value(n, k, arr) << endl;
 
    n = 9;
    k = 3;
    int arr1[] = { 2, 4, 3, 9, 5, 8, 7, 6, 10 };
    cout << maximum_middle_value(n, k, arr1) << endl;
 
    return 0;
}

Java




// Java implementation of the approach
import java.util.*;
 
class GFG
{
 
// Function to calculate maximum possible middle
// value of the array after deleting exactly k
// elements
static int maximum_middle_value(int n, int k, int arr[])
{
    // Initialize answer as -1
    int ans = -1;
 
    // Calculate range of elements that can give
    // maximum possible middle value of the array
    // since index of maximum possible middle
    // value after deleting exactly k elements from
    // array will lie in between low and high
    int low = (n + 1 - k) / 2;
 
    int high = (n + 1 - k) / 2 + k;
 
    // Find maximum element of the array in
    // range low and high
    for (int i = low; i <= high; i++)
    {
 
        // since indexing is 1 based so
        // check element at index i - 1
        ans = Math.max(ans, arr[i - 1]);
    }
 
    // Return the maximum possible middle value
    // of the array after deleting exactly k
    // elements from the array
    return ans;
}
 
// Driver Code
public static void main(String args[])
{
    int n = 5, k = 2;
    int arr[] = { 9, 5, 3, 7, 10 };
    System.out.println( maximum_middle_value(n, k, arr));
 
    n = 9;
    k = 3;
    int arr1[] = { 2, 4, 3, 9, 5, 8, 7, 6, 10 };
    System.out.println( maximum_middle_value(n, k, arr1));
}
}
 
// This code is contributed by Arnab Kundu

Python3




# Python3 implementation of the approach
 
# Function to calculate maximum possible
# middle value of the array after
# deleting exactly k elements
def maximum_middle_value(n, k, arr):
  
    # Initialize answer as -1
    ans = -1
 
    # Calculate range of elements that can give
    # maximum possible middle value of the array
    # since index of maximum possible middle
    # value after deleting exactly k elements
    # from array will lie in between low and high
    low = (n + 1 - k) // 2
 
    high = (n + 1 - k) // 2 + k
 
    # Find maximum element of the
    # array in range low and high
    for i in range(low, high+1): 
 
        # since indexing is 1 based so
        # check element at index i - 1
        ans = max(ans, arr[i - 1])
      
    # Return the maximum possible middle
    # value of the array after deleting
    # exactly k elements from the array
    return ans
  
# Driver Code
if __name__ == "__main__":
  
    n, k = 5, 2
    arr = [9, 5, 3, 7, 10]
    print(maximum_middle_value(n, k, arr))
 
    n, k = 9, 3
    arr1 = [2, 4, 3, 9, 5, 8, 7, 6, 10
    print(maximum_middle_value(n, k, arr1))
 
# This code is contributed by Rituraj Jain

C#




// C# implementation of the approach
using System;
 
class GFG
{
     
// Function to calculate maximum possible middle
// value of the array after deleting exactly k
// elements
static int maximum_middle_value(int n, int k, int []arr)
{
    // Initialize answer as -1
    int ans = -1;
 
    // Calculate range of elements that can give
    // maximum possible middle value of the array
    // since index of maximum possible middle
    // value after deleting exactly k elements from
    // array will lie in between low and high
    int low = (n + 1 - k) / 2;
 
    int high = (n + 1 - k) / 2 + k;
 
    // Find maximum element of the array in
    // range low and high
    for (int i = low; i <= high; i++)
    {
 
        // since indexing is 1 based so
        // check element at index i - 1
        ans = Math.Max(ans, arr[i - 1]);
    }
 
    // Return the maximum possible middle value
    // of the array after deleting exactly k
    // elements from the array
    return ans;
}
 
// Driver Code
static public void Main ()
{
         
    int n = 5, k = 2;
    int []arr = { 9, 5, 3, 7, 10 };
    Console.WriteLine( maximum_middle_value(n, k, arr));
 
    n = 9;
    k = 3;
    int []arr1 = { 2, 4, 3, 9, 5, 8, 7, 6, 10 };
    Console.WriteLine( maximum_middle_value(n, k, arr1));
}
}
 
// This code is contributed by ajit.

Javascript




<script>
 
// Function to calculate maximum possible middle
// value of the array after deleting exactly k
// elements
function maximum_middle_value(n, k, arr)
{
    // Initialize answer as -1
    let ans = -1;
 
    // Calculate range of elements that can give
    // maximum possible middle value of the array
    // since index of maximum possible middle
    // value after deleting exactly k elements from
    // array will lie in between low and high
    let low = Math.floor((n + 1 - k) / 2);
 
    let high = Math.floor(((n + 1 - k) / 2) + k);
 
    // Find maximum element of the array in
    // range low and high
    for (let i = low; i <= high; i++) {
 
        // since indexing is 1 based so
        // check element at index i - 1
        ans = Math.max(ans, arr[i - 1]);
    }
 
    // Return the maximum possible middle value
    // of the array after deleting exactly k
    // elements from the array
    return ans;
}
 
// Driver Code
 
    let n = 5, k = 2;
    let arr = [ 9, 5, 3, 7, 10 ];
    document.write(maximum_middle_value(n, k, arr) + "<br>");
 
    n = 9;
    k = 3;
    let arr1 = [ 2, 4, 3, 9, 5, 8, 7, 6, 10 ];
    document.write(maximum_middle_value(n, k, arr1) + "<br>");
 
 
// This code is contributed by Mayank Tyagi
 
</script>

Output: 

7
9

 

Time Complexity: O(high-low), where high and low are the terms calculated
Auxiliary Space: O(1), as no extra space is used


My Personal Notes arrow_drop_up
Last Updated : 09 Jun, 2022
Like Article
Save Article
Similar Reads
Related Tutorials