Dada una array arr[] de N enteros, la tarea es dividir la array en dos subconjuntos de modo que la diferencia absoluta entre el máximo del primer subconjunto y el mínimo del segundo subconjunto sea mínima.
Ejemplos:
Entrada: arr[] = {3, 1, 2, 6, 4}
Salida: 1
Explicación:
dividir la array dada en dos subconjuntos, A = [1, 2, 4], B = [3, 6]. La diferencia del máximo del primer conjunto es 4 y el mínimo del segundo conjunto es 3 y su diferencia es 1.
Entrada: arr[] = {2, 1, 3, 2, 4, 3}
Salida: 0
Explicación:
dividir la array dada en dos subconjuntos, A = [1, 2, 2, 3], B = [3, 4]. La diferencia del máximo del primer conjunto es 3 y el mínimo del segundo conjunto es 3 y su diferencia es 0.
Enfoque: Para resolver el problema anterior, tenemos que encontrar los dos enteros tales que m y n tales que el máximo del primer conjunto sea m y el mínimo del segundo conjunto sea n . La idea es ordenar la array dada en orden ascendente y después de ordenar la array, la diferencia mínima entre el elemento consecutivo es la diferencia mínima requerida después de dividir los elementos de la array en subconjuntos.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program for the above approach #include <bits/stdc++.h> using namespace std; // Function to split the array int splitArray(int arr[], int N) { // Sort the array in increasing order sort(arr, arr + N); int result = INT_MAX; // Calculating the max difference // between consecutive elements for (int i = 1; i < N; i++) { result = min(result, arr[i] - arr[i - 1]); } // Return the final minimum difference return result; } // Driver Code int main() { // Given array arr[] int arr[] = { 3, 1, 2, 6, 4 }; // Size of array int N = sizeof(arr) / sizeof(arr[0]); // Function Call cout << splitArray(arr, N); return 0; }
Java
// java program for the above approach import java.util.*; class GFG{ // Function to split the array static int splitArray(int arr[], int N) { // Sort the array in increasing order Arrays.sort(arr); int result = Integer.MAX_VALUE; // Calculating the max difference // between consecutive elements for (int i = 1; i < N; i++) { result = Math.min(result, arr[i] - arr[i - 1]); } // Return the final minimum difference return result; } // Driver Code public static void main(String[] args) { // Given array arr[] int arr[] = { 3, 1, 2, 6, 4 }; // Size of array int N = arr.length; // Function Call System.out.print(splitArray(arr, N)); } } // This code is contributed by shivanisinghss2110
Python3
# Python3 program for the above approach # Function to split the array def splitArray(arr, N): # Sort the array in increasing # order arr = sorted(arr) result = 10 ** 9 # Calculating the max difference # between consecutive elements for i in range(1, N): result = min(result, arr[i] - arr[i - 1]) # Return the final minimum difference return result # Driver Code if __name__ == '__main__': # Given array arr[] arr = [ 3, 1, 2, 6, 4 ] # Size of array N = len(arr) # Function Call print(splitArray(arr, N)) # This code is contributed by mohit kumar 29
C#
// C# program for the above approach using System; class GFG{ // Function to split the array static int splitArray(int []arr, int N) { // Sort the array in increasing order Array.Sort(arr); int result = Int32.MaxValue; // Calculating the max difference // between consecutive elements for (int i = 1; i < N; i++) { result = Math.Min(result, arr[i] - arr[i - 1]); } // Return the final minimum difference return result; } // Driver Code public static void Main() { // Given array arr[] int []arr = { 3, 1, 2, 6, 4 }; // Size of array int N = arr.Length; // Function Call Console.Write(splitArray(arr, N)); } } // This code is contributed by Code_Mech
Javascript
<script> // Javascript program for the above approach // Function to split the array function splitArray(arr, N) { // Sort the array in increasing order arr.sort(); let result = Number.MAX_VALUE; // Calculating the max difference // between consecutive elements for (let i = 1; i < N; i++) { result = Math.min(result, arr[i] - arr[i - 1]); } // Return the final minimum difference return result; } // Given array arr[] let arr = [ 3, 1, 2, 6, 4 ]; // Size of array let N = arr.length; // Function Call document.write(splitArray(arr, N)); </script>
1
Complejidad de tiempo: O(N*log N)