Reorganice la array de manera que la suma de los mismos elementos indexados sea como máximo K

Dados dos arreglos A[] y B[] que consisten en N enteros cada uno y un entero K , la tarea es reorganizar el arreglo B[] de modo que la suma de A i + B i sea como máximo K . Si tal arreglo no es posible, imprima -1 .

Ejemplos:

Entrada: A[] = {1, 2, 3, 4, 2}, B[] = {1, 2, 3, 1, 1}, K = 5
Salida: 1 3 1 1 2

Entrada: A[] = {1, 2, 3, 4, 5}, B[] = {2, 3, 4, 5, 6}, K = 6
Salida: -1

Enfoque: La reorganización más óptima de la array B[] para satisfacer las condiciones dadas es ordenar la array en orden descendente .

Prueba: 

  1. Dado que la suma de cada par de i ésimos elementos indexados puede ser como máximo K. Por lo tanto, mn + num ≤ X y mx + num1 ≤ X , donde mn y mx son los elementos mínimos en el arreglo A[] y B[] respectivamente.
  2. Por lo tanto, por inducción, se puede probar que mn y mx se pueden aparear.
  3. Por lo tanto, ordenar la array en orden descendente es la reorganización más óptima.

Siga los pasos a continuación para resolver el problema: 

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 rearrange array such
// that sum of similar indexed elements
// does not exceed K
void rearrangeArray(int A[], int B[],
                    int N, int K)
{
    // Sort the array B[]
    // in descending order
    sort(B, B + N, greater<int>());
 
    bool flag = true;
 
    for (int i = 0; i < N; i++) {
 
        // If condition fails
        if (A[i] + B[i] > K) {
            flag = false;
            break;
        }
    }
 
    if (!flag) {
 
        cout << "-1" << endl;
    }
    else {
 
        // Print the array
        for (int i = 0; i < N; i++) {
            cout << B[i] << " ";
        }
    }
}
 
// Driver Code
int main()
{
    // Given arrays
    int A[] = { 1, 2, 3, 4, 2 };
    int B[] = { 1, 2, 3, 1, 1 };
 
    int N = sizeof(A) / sizeof(A[0]);
 
    int K = 5;
 
    rearrangeArray(A, B, N, K);
 
    return 0;
}

Java

// Java program for the above approach
import java.util.*;
 
class GFG{
 
// Reverse array
static int[] reverse(int a[])
{
    int i, n = a.length, t;
    for(i = 0; i < n / 2; i++)
    {
        t = a[i];
        a[i] = a[n - i - 1];
        a[n - i - 1] = t;
    }
    return a;
}
     
// Function to rearrange array such
// that sum of similar indexed elements
// does not exceed K
static void rearrangeArray(int A[], int B[],
                           int N, int K)
{
     
    // Sort the array B[]
    // in descending order
    Arrays.sort(B);
    B = reverse(B);
 
    boolean flag = true;
 
    for(int i = 0; i < N; i++)
    {
         
        // If condition fails
        if (A[i] + B[i] > K)
        {
            flag = false;
            break;
        }
    }
 
    if (!flag)
    {
        System.out.print("-1" + "\n");
    }
    else
    {
         
        // Print the array
        for(int i = 0; i < N; i++)
        {
            System.out.print(B[i] + " ");
        }
    }
}
 
// Driver Code
public static void main(String[] args)
{
     
    // Given arrays
    int A[] = { 1, 2, 3, 4, 2 };
    int B[] = { 1, 2, 3, 1, 1 };
 
    int N = A.length;
 
    int K = 5;
 
    rearrangeArray(A, B, N, K);
}
}
 
// This code is contributed by Amit Katiyar

Python3

# Python3 program for the above approach
 
# Function to rearrange array such
# that sum of similar indexed elements
# does not exceed K
def rearrangeArray(A, B, N, K):
     
    # Sort the array B[]
    # in descending order
    B.sort(reverse = True)
 
    flag = True
 
    for i in range(N):
         
        # If condition fails
        if (A[i] + B[i] > K):
            flag = False
            break
 
    if (flag == False):
        print("-1")
    else:
         
        # Print the array
        for i in range(N):
            print(B[i], end = " ")
 
# Driver Code
if __name__ == '__main__':
     
    # Given arrays
    A = [ 1, 2, 3, 4, 2 ]
    B = [ 1, 2, 3, 1, 1 ]
 
    N = len(A)
    K = 5;
 
    rearrangeArray(A, B, N, K)
 
# This code is contributed by SURENDRA_GANGWAR

C#

// C# program for the
// above approach
using System;
class GFG{
 
// Reverse array
static int[] reverse(int []a)
{
  int i, n = a.Length, t;
   
  for(i = 0; i < n / 2; i++)
  {
    t = a[i];
    a[i] = a[n - i - 1];
    a[n - i - 1] = t;
  }
  return a;
}
     
// Function to rearrange array such
// that sum of similar indexed elements
// does not exceed K
static void rearrangeArray(int []A, int []B,
                           int N, int K)
{   
  // Sort the array []B
  // in descending order
  Array.Sort(B);
  B = reverse(B);
 
  bool flag = true;
 
  for(int i = 0; i < N; i++)
  {
    // If condition fails
    if (A[i] + B[i] > K)
    {
      flag = false;
      break;
    }
  }
 
  if (!flag)
  {
    Console.Write("-1" + "\n");
  }
  else
  {
    // Print the array
    for(int i = 0; i < N; i++)
    {
      Console.Write(B[i] + " ");
    }
  }
}
 
// Driver Code
public static void Main(String[] args)
{   
  // Given arrays
  int []A = {1, 2, 3, 4, 2};
  int []B = {1, 2, 3, 1, 1};
 
  int N = A.Length;
  int K = 5;
  rearrangeArray(A, B, N, K);
}
}
 
// This code is contributed by Rajput-Ji

Javascript

<script>
 
// JavaScript program for the above approach
 
// Reverse array
function reverse(a)
{
    let i, n = a.length, t;
    for(i = 0; i < n / 2; i++)
    {
        t = a[i];
        a[i] = a[n - i - 1];
        a[n - i - 1] = t;
    }
    return a;
}
      
// Function to rearrange array such
// that sum of similar indexed elements
// does not exceed K
function rearrangeArray(A, B, N, K)
{
      
    // Sort the array B[]
    // in descending order
    B.sort();
    B = reverse(B);
  
    let flag = true;
  
    for(let i = 0; i < N; i++)
    {
          
        // If condition fails
        if (A[i] + B[i] > K)
        {
            flag = false;
            break;
        }
    }
  
    if (!flag)
    {
         document.write("-1" + "<br/>");
    }
    else
    {
          
        // Print the array
        for(let i = 0; i < N; i++)
        {
             document.write(B[i] + " ");
        }
    }
}
 
// Driver Code
 
// Given arrays
let A = [ 1, 2, 3, 4, 2 ];
let B = [ 1, 2, 3, 1, 1 ];
 
let N = A.length;
let K = 5;
 
rearrangeArray(A, B, N, K);
 
// This code is contribute by target_2
 
</script>
Producción: 

3 2 1 1 1

 

Complejidad de tiempo: O(N log N), utilizado para ordenar la array dada B 
Complejidad de espacio auxiliar: O(1)

Publicación traducida automáticamente

Artículo escrito por yashrajyash18 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *