Producto mínimo de k enteros en una array de enteros positivos

Dada una array de n enteros positivos. Estamos obligados a escribir un programa para imprimir el producto mínimo de k enteros de la array dada.

Ejemplos: 

Input : 198 76 544 123 154 675
         k = 2
Output : 9348
We get minimum product after multiplying
76 and 123.

Input : 11 8 5 7 5 100
        k = 4
Output : 1400

La idea es simple, encontramos los elementos k más pequeños e imprimimos la multiplicación de ellos. En la implementación a continuación, hemos utilizado un enfoque simple basado en Heap donde insertamos elementos de array en un mini-heap y luego encontramos el producto de los k elementos principales.

Diagrama de flujo:

diagrama de flujo

Implementación:

C++

// CPP program to find minimum product of
// k elements in an array
#include <bits/stdc++.h>
using namespace std;
 
int minProduct(int arr[], int n, int k)
{
    priority_queue<int, vector<int>, greater<int> > pq;
    for (int i = 0; i < n; i++)
        pq.push(arr[i]);
 
    int count = 0, ans = 1;
 
    // One by one extract items from max heap
    while (pq.empty() == false && count < k) {
        ans = ans * pq.top();
        pq.pop();
        count++;
    }
 
    return ans;
}
 
// Driver code
int main()
{
    int arr[] = { 198, 76, 544, 123, 154, 675 };
    int k = 2;
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << "Minimum product is " << minProduct(arr, n, k);
    return 0;
}

Java

// Java program to find minimum product of
// k elements in an array
 
import java.util.PriorityQueue;
 
class GFG
{
    public static int minProduct(int[] arr, int n, int k)
    {
        PriorityQueue<Integer> pq = new PriorityQueue<>();
        for (int i = 0; i < n; i++)
            pq.add(arr[i]);
         
            int count = 0, ans = 1;
 
            // One by one extract items
            while(pq.isEmpty() == false && count < k)
            {
                ans = ans * pq.element();
                pq.remove();
                count++;
            }
         
            return ans;
    }
 
    // Driver Code
    public static void main(String[] args)
    {
        int arr[] = {198, 76, 544, 123, 154, 675};
        int k = 2;
        int n = arr.length;
        System.out.print("Minimum product is " +
                          minProduct(arr, n, k));
    }
}
 
// This code is contributed by sanjeev2552

Python3

# Python3 program to find minimum
# product of k elements in an array
 
import math
import heapq
 
def minProduct(arr, n, k):
 
    heapq.heapify(arr)
    count = 0
    ans = 1
 
    # One by one extract
    # items from min heap
    while ( arr ) and count < k:
        x = heapq.heappop(arr)
        ans = ans * x
        count = count + 1
     
    return ans;
 
# Driver method
arr = [198, 76, 544, 123, 154, 675]
k = 2
n = len(arr)
print ("Minimum product is",
       minProduct(arr, n, k))

C#

// C# program to find minimum product of
// k elements in an array
 
using System;
using System.Collections.Generic;
public class GFG
{
  public static int minProduct(int[] arr, int n, int k)
  {
    List<int> pq = new List<int>();
    for (int i = 0; i < n; i++)
      pq.Add(arr[i]);
 
    int count = 0, ans = 1;
 
    // One by one extract items
    while(pq.Count!=0 && count < k)
    {
      pq.Sort();
      ans = ans * pq[0];
      pq.RemoveAt(0);
      count++;
    }
 
    return ans;
  }
 
  // Driver Code
  public static void Main(String[] args)
  {
    int []arr = {198, 76, 544, 123, 154, 675};
    int k = 2;
    int n = arr.Length;
    Console.Write("Minimum product is " +
                  minProduct(arr, n, k));
  }
}
 
// This code is contributed by Rajput-Ji

Javascript

<script>
 
// Javascript program to find minimum product of
// k elements in an array
 
function minProduct(arr, n, k) {
    let pq = new Array();
    for (let i = 0; i < n; i++)
        pq.push(arr[i]);
 
    let count = 0, ans = 1;
 
    // One by one extract items
    while (pq.length != 0 && count < k) {
        pq.sort((a, b) => a - b);
        ans = ans * pq[0];
        pq.shift(0);
        count++;
    }
 
    return ans;
}
 
// Driver Code
 
let arr = [198, 76, 544, 123, 154, 675];
let k = 2;
let n = arr.length;
document.write("Minimum product is " + minProduct(arr, n, k));
 
 
// This code is contributed by Saurabh Jaiswal
</script>
Producción

Minimum product is 9348

Complejidad de tiempo: O(n * log n), 
Espacio auxiliar: O(n) para cola de prioridad

Nota: El problema anterior se puede resolver en tiempo O(n) usando los métodos discutidos aquí y aquí .

Este artículo es una contribución de Gitanjali Sharma . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Publicación traducida automáticamente

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