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

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 // elementsint 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 Codeint 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> |
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
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 zambiatek!



