Programa C para la compra de acciones y la venta para maximizar las ganancias

Enfoque eficiente: si se nos permite comprar y vender solo una vez, entonces podemos usar el siguiente algoritmo. Diferencia máxima entre dos elementos . Aquí se nos permite comprar y vender varias veces. 
El siguiente es el algoritmo para este problema.  

  1. Encuentre los mínimos locales y guárdelos como índice inicial. Si no existe, regresa.
  2. Encuentre los máximos locales. y guárdelo como un índice final. Si llegamos al final, establezca el final como el índice final.
  3. Actualice la solución (Incremente el recuento de pares de compra-venta)
  4. Repita los pasos anteriores si no se llega al final.

C

// Program to find best buying and
// selling days
#include <stdio.h>
 
// Solution structure
struct Interval
{
    int buy;
    int sell;
};
 
// This function finds the buy and sell
// schedule for maximum profit
void stockBuySell(int price[], int n)
{
    // Prices must be given for at
    // least two days
    if (n == 1)
        return;
 
    // Count of solution pairs
    int count = 0;
 
    // Solution vector
    Interval sol[n / 2 + 1];
 
    // Traverse through given price array
    int i = 0;
    while (i < n - 1)
    {
        // Find Local Minima. Note that the
        // limit is (n-2) as we are comparing
        // present element to the next element.
        while ((i < n - 1) &&
               (price[i + 1] <= price[i]))
            i++;
 
        // If we reached the end, break as no
        // further solution possible
        if (i == n - 1)
            break;
 
        // Store the index of minima
        sol[count].buy = i++;
 
        // Find Local Maxima.  Note that the
        // limit is (n-1) as we are comparing
        // to previous element
        while ((i < n) &&
               (price[i] >= price[i - 1]))
            i++;
 
        // Store the index of maxima
        sol[count].sell = i - 1;
 
        // Increment count of buy/sell pairs
        count++;
    }
 
    // Print solution
    if (count == 0)
        printf(
        "There is no day when buying the stock will make profitn");
    else
    {
        for (int i = 0; i < count; i++)
            printf(
            "Buy on day: %dt Sell on day: %dn", sol[i].buy, sol[i].sell);
    }
 
    return;
}
 
// Driver code
int main()
{
    // Stock prices on consecutive days
    int price[] = {100, 180, 260,
                   310, 40, 535, 695};
    int n = sizeof(price) / sizeof(price[0]);
 
    // Function call
    stockBuySell(price, n);
 
    return 0;
}

Producción:

Buy on day: 0     Sell on day: 3
Buy on day: 4     Sell on day: 6

Complejidad del tiempo: el bucle externo se ejecuta hasta que me convierto en n-1. Los dos bucles internos incrementan el valor de I en cada iteración. Entonces la complejidad del tiempo total es O(n)

Espacio Auxiliar : O(1) ya que usa variables constantes

¡ Consulte el artículo completo sobre Stock Buy Sell to Maximize Profit para obtener más detalles!

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 *