Dada una array arr[] de enteros positivos de tamaño M y un número entero N , la tarea es maximizar el producto de la array después de restar 1 de cualquier elemento N número de veces
Ejemplos :
Entrada : M = 5, arr[] = {5, 1, 7, 8, 3}, N = 2
Salida : 630
Explicación : después de restar 1 de arr[3] 2 veces, la array se convierte en {5, 1, 7, 6, 3} con producto = 630
Entrada : M = 2, arr[] = {2, 2}, N = 4
Salida : 0
Explicación : después de restar 2 de arr[0] y arr[1] 2 veces cada uno, array se convierte en {0, 0} con producto = 0
Enfoque : la tarea se puede resolver con la ayuda de max-heap Siga los pasos a continuación para resolver el problema:
- Inserta todos los elementos dentro de un montón máximo
- Extraiga el elemento superior del montón máximo y disminuya 1 de él, también disminuya N
- Inserte el elemento emergente de nuevo en max-heap
- Continuar este proceso hasta N > 0
- El producto máximo será el producto de todos los elementos dentro del montón máximo
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 find the maximum // product of the array int getMax(int m, int arr[], int n) { // Max-heap priority_queue<int> q; // Store all the elements inside max-heap for (int i = 0; i < m; i++) q.push(arr[i]); // n operations while (n--) { int x = q.top(); q.pop(); // Decrement x --x; // Push back x inside the heap q.push(x); } // Store the max product possible int ans = 1; while (!q.empty()) { ans *= q.top(); q.pop(); } return ans; } // Driver Code int main() { int M = 5; int arr[5] = { 5, 1, 7, 8, 3 }; int N = 2; cout << getMax(M, arr, N); }
Java
// Java program for the above approach import java.util.*; class GFG { // Function to find the maximum // product of the array static Integer getMax(int m, Integer arr[], int n) { // Max-heap PriorityQueue<Integer> q = new PriorityQueue<Integer>( Collections.reverseOrder()); // Store all the elements inside max-heap for (int i = 0; i < m; i++) q.add(arr[i]); // n operations while (n-- != 0) { Integer x = q.poll(); // Decrement x --x; // Push back x inside the heap q.add(x); } // Store the max product possible Integer ans = 1; while (q.size() != 0) { ans *= q.poll(); } return ans; } // Driver Code public static void main(String[] args) { int M = 5; Integer arr[] = { 5, 1, 7, 8, 3 }; int N = 2; System.out.println(getMax(M, arr, N)); } } // This code is contributed by Potta Lokesh
Python3
# python program for the above approach from queue import PriorityQueue # Function to find the maximum # product of the array def getMax(m, arr, n): # Max-heap q = PriorityQueue() # Store all the elements inside max-heap for i in range(0, m): q.put(-arr[i]) # n operations while (n): n -= 1 x = -q.get() # Decrement x x -= 1 # Push back x inside the heap q.put(-x) # Store the max product possible ans = 1 while (not q.empty()): ans *= -q.get() return ans # Driver Code if __name__ == "__main__": M = 5 arr = [5, 1, 7, 8, 3] N = 2 print(getMax(M, arr, N)) # This code is contributed by rakeshsahni
C#
// C# program for the above approach using System; using System.Collections.Generic; public class GFG { // Function to find the maximum // product of the array static int getMax(int m, int []arr, int n) { // Max-heap List<int> q = new List<int>(); // Store all the elements inside max-heap for (int i = 0; i < m; i++){ q.Add(arr[i]); } q.Sort(); q.Reverse(); // n operations while (n-- != 0) { int x = q[0]; q.RemoveAt(0); // Decrement x --x; // Push back x inside the heap q.Add(x); q.Sort(); q.Reverse(); } // Store the max product possible int ans = 1; while (q.Count != 0) { ans *= q[0]; q.RemoveAt(0); } return ans; } // Driver Code public static void Main(String[] args) { int M = 5; int []arr = { 5, 1, 7, 8, 3 }; int N = 2; Console.WriteLine(getMax(M, arr, N)); } } // This code is contributed by shikhasingrajput
Javascript
<script> // Javascript program for the above approach // Function to find the maximum // product of the array function getMax(m, arr, n) { // Max-heap let q = []; // Store all the elements inside max-heap for (let i = 0; i < m; i++) { q.push(arr[i]); } q.sort(); q.reverse(); // n operations while (n-- != 0) { let x = q[0]; q.splice(0, 1); // Decrement x --x; // Push back x inside the heap q.push(x); q.sort(); q.reverse(); } // Store the max product possible let ans = 1; while (q.length != 0) { ans *= q[0]; q.splice(0, 1); } return ans; } // Driver Code let M = 5; let arr = [5, 1, 7, 8, 3]; let N = 2; document.write(getMax(M, arr, N)); // This code is contributed by gfgking </script>
630
Tiempo Complejidad : O(nlogm)
Espacio Auxiliar : O(m)
Publicación traducida automáticamente
Artículo escrito por saurabh15899 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA