Modifique la array a otra array dada reemplazando los elementos de la array con la suma de la array

Dada una entrada de array [] que consta solo de 1 s inicialmente y una array objetivo [] de tamaño N , la tarea es verificar si la entrada de array [] se puede convertir en objetivo [] reemplazando entrada [i] con la suma de elementos de array en cada paso. Si se encuentra que es cierto, escriba «SÍ» . De lo contrario, escriba «NO» .

Ejemplos:

Entrada: entrada[] = { 1, 1, 1 }, objetivo[] = { 9, 3, 5 } 
Salida: SÍ 
Explicación: 
Reemplazar entrada[1] con (entrada[0] + entrada[1] + entrada[2 ]) modifica input[] a { 1, 3, 1 } 
Reemplazando input[2] con (input[0] + input[1] + input[2]) modifica input[] a { 1, 3, 5 } 
Reemplazando input [0] con (input[0] + input[1] + input[2]) modifica input[] a { 9, 3, 5 } 
Dado que la array input[] es igual a la array target[], la salida requerida es «SÍ».

Entrada: entrada[] = { 1, 1, 1, 1 }, objetivo[] = { 1, 1, 1, 2 } 
Salida: NO

Enfoque: El problema se puede resolver usando la técnica Greedy . La idea es disminuir siempre el elemento más grande de la array target[] por la suma de los elementos restantes de la array y verificar si es el elemento más grande de target[] . Si se encuentra que es cierto, escriba «SÍ» . De lo contrario, escriba «NO» . Las siguientes son las observaciones:

Si target[] = { 9, 3, 5 } e input[] = { 1, 1, 1 } 
Decrementar target[0] por (target[1] + target[2]) modifica target[] a { 1, 3 , 5 } 
Decrementar objetivo[2] en (objetivo[0] + objetivo[1]) modifica objetivo[] a { 1, 3, 1 } 
Decrementar objetivo[1] en (objetivo[0] + objetivo[2]) modifica target[] a { 1, 1, 1 } 
Dado que input[] array y target[] son ​​iguales, la salida requerida es SÍ. 
 

  • Si el elemento más grande en la array target[] es menor que 1 , imprima «NO» .
  • Si el elemento más grande en la array objetivo[] es igual a 1 , entonces imprima «SÍ» .
  • De lo contrario, disminuya el elemento más grande de la array target[] por la suma de los elementos restantes presentes en la array target[] mientras que el elemento más grande de la array es mayor que 1 .

A continuación se muestra la implementación del enfoque anterior:

C++

// CPP program to implement
// the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to check if the arr[] can be
// converted to target[] by replacing
// any element in arr[] by the sum of arr[]
bool isPossible(int target[], int n)
{
 
  // Store the maximum element
  int max = 0;
 
  // Store the index of
  // the maximum element
  int index = 0;
 
  // Traverse the array target[]
  for (int i = 0; i < n; i++) {
 
    // If current element is
    // greater than max
    if (max < target[i]) {
      max = target[i];
      index = i;
    }
  }
 
  // If max element is 1
  if (max == 1)
    return true;
 
  // Traverse the array, target[]
  for (int i = 0; i < n; i++) {
 
    // If current index is not equal to
    // maximum element index
    if (i != index) {
 
      // Update max
      max -= target[i];
 
      // If max is less than
      // or equal to 0,
      if (max <= 0)
        return false;
    }
  }
 
  // Update the maximum element
  target[index] = max;
 
  // Recursively call the function
  return isPossible(target,n);
}
 
// Driver Code
int main()
{
  int target[] = { 9, 3, 5 };
   
  // Size of the array
   int n = sizeof(target) / sizeof(target[0]);
 
  bool res = isPossible(target,n);
 
  if (res)
  {
 
    cout << "YES";
  }
  else
  {
    cout << "NO";
  }
  return 0;
}
 
// This code is contributed by 29AjayKumar

Java

// Java program to implement
// the above approach
 
import java.io.*;
import java.util.*;
 
class GFG {
 
    // Function to check if the arr[] can be
    // converted to target[] by replacing
    // any element in arr[] by the sum of arr[]
    public static boolean isPossible(int[] target)
    {
 
        // Store the maximum element
        int max = 0;
 
        // Store the index of
        // the maximum element
        int index = 0;
 
        // Traverse the array target[]
        for (int i = 0; i < target.length; i++) {
 
            // If current element is
            // greater than max
            if (max < target[i]) {
                max = target[i];
                index = i;
            }
        }
 
        // If max element is 1
        if (max == 1)
            return true;
 
        // Traverse the array, target[]
        for (int i = 0; i < target.length; i++) {
 
            // If current index is not equal to
            // maximum element index
            if (i != index) {
 
                // Update max
                max -= target[i];
 
                // If max is less than
                // or equal to 0,
                if (max <= 0)
                    return false;
            }
        }
 
        // Update the maximum element
        target[index] = max;
 
        // Recursively call the function
        return isPossible(target);
    }
 
    // Driver Code
    public static void main(String[] args)
    {
        int[] target = { 9, 3, 5 };
 
        boolean res = isPossible(target);
 
        if (res) {
 
            System.out.println("YES");
        }
        else {
            System.out.println("NO");
        }
    }
}

Python3

# Python program to implement the above approach
 
# Function to check if the arr[] can be
# converted to target[] by replacing
# any element in arr[] by the sum of arr[]
def isPossible(target):
   
  # Store the maximum element
  max = 0
 
  # Store the index of
  # the maximum element
  index = 0
 
  # Traverse the array target[]
  for i in range(len(target)):
     
    # If current element is
    # greater than max
    if (max < target[i]):
      max = target[i]
      index = i
 
  # If max element is 1
  if (max == 1):
    return True
 
  # Traverse the array, target[]
  for i in range(len(target)):
     
    # If current index is not equal to
    # maximum element index
    if (i != index):
       
      # Update max
      max -= target[i]
       
      # If max is less than
      # or equal to 0,
      if (max <= 0):
        return False
       
  # Update the maximum element
  target[index] = max
 
  # Recursively call the function
  return isPossible(target)
 
# Driver Code
target = [ 9, 3, 5 ]
res = isPossible(target)
if (res):
  print("YES")
else:
  print("NO")
 
  # This code is contributed by RohitSingh07052.

C#

// C# program for the above approach
using System;
class GFG
{
 
    // Function to check if the arr[] can be
    // converted to target[] by replacing
    // any element in arr[] by the sum of arr[]
    public static bool isPossible(int[] target)
    {
 
        // Store the maximum element
        int max = 0;
 
        // Store the index of
        // the maximum element
        int index = 0;
 
        // Traverse the array target[]
        for (int i = 0; i < target.Length; i++) {
 
            // If current element is
            // greater than max
            if (max < target[i])
            {
                max = target[i];
                index = i;
            }
        }
 
        // If max element is 1
        if (max == 1)
            return true;
 
        // Traverse the array, target[]
        for (int i = 0; i < target.Length; i++) {
 
            // If current index is not equal to
            // maximum element index
            if (i != index) {
 
                // Update max
                max -= target[i];
 
                // If max is less than
                // or equal to 0,
                if (max <= 0)
                    return false;
            }
        }
 
        // Update the maximum element
        target[index] = max;
 
        // Recursively call the function
        return isPossible(target);
    }
 
   
// Driver Code
static public void Main()
{
        int[] target = { 9, 3, 5 };
 
        bool res = isPossible(target);
 
        if (res)
        {
            Console.WriteLine("YES");
        }
        else
        {
            Console.WriteLine("NO");
        }
    }
}
 
// This code is contributed by jana_sayantan.

Javascript

<script>
 
// javascript program to implement
// the above approach
 
 
// Function to check if the arr can be
// converted to target by replacing
// any element in arr by the sum of arr
function isPossible(target)
{
 
    // Store the maximum element
    var max = 0;
 
    // Store the index of
    // the maximum element
    var index = 0;
 
    // Traverse the array target
    for (i = 0; i < target.length; i++) {
 
        // If current element is
        // greater than max
        if (max < target[i]) {
            max = target[i];
            index = i;
        }
    }
 
    // If max element is 1
    if (max == 1)
        return true;
 
    // Traverse the array, target
    for (i = 0; i < target.length; i++) {
 
        // If current index is not equal to
        // maximum element index
        if (i != index) {
 
            // Update max
            max -= target[i];
 
            // If max is less than
            // or equal to 0,
            if (max <= 0)
                return false;
        }
    }
 
    // Update the maximum element
    target[index] = max;
 
    // Recursively call the function
    return isPossible(target);
}
 
// Driver Code
var target = [ 9, 3, 5 ];
 
res = isPossible(target);
 
if (res) {
 
    document.write("YES");
}
else {
    document.write("NO");
}
// This code is contributed by 29AjayKumar
</script>
Producción: 

YES

 

Complejidad de Tiempo: O(N 2 )
Espacio Auxiliar: O(1)

Publicación traducida automáticamente

Artículo escrito por rohit2sahu 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 *