6.4 C
New York

Maximiser le nombre complete du tableau donné


Étant donné un tableau chiffres de longueur N qui contient deux sorts de nombres, l’un ayant la valeur zérole second qui est un entier positif, la tâche consiste à collecter les nombres des opérations ci-dessous et à renvoyer la valeur maximale que vous pouvez collecter.

  • Si le nombre donné est un entier positif, alors c’est votre choix, si vous pouvez le mettre en haut de la file d’attente ou non.
  • Sinon, si le nombre est zéro, choisissez le nombre le plus élevé dans la file d’attente et supprimez-le.

Exemples:

Saisir: N = 7, nombres = (1, 2, 3, 0, 4, 5, 0)
Sortir: 8
Explication: Pour maximiser la valeur totale, effectuez l’opération suivante lors de l’itération de nums() :
nums(0) = 1, placé en haut de la file d’attente. La file d’attente devient : (1)
nums(1) = 2, placé en haut de la file d’attente. La file d’attente devient : (2, 1)
nums(2) = 3, placé en haut de la file d’attente. La file d’attente devient : (3, 2, 1)
nums(3) = 0, choisissez la valeur supérieure de la file d’attente et supprimez-la. Complete val = 3, et la file d’attente devient : (2, 1)
nums(4) = 4, placé en haut de la file d’attente. La file d’attente devient : (4, 2, 1)
nums(5) = 5, placé en haut de la file d’attente. La file d’attente devient : (5, 4, 2, 1)
nums(6) = 0, choisissez la valeur supérieure de la file d’attente et supprimez-la. Valeur totale = 3 + 5 = 8, et la file d’attente devient : (4, 2, 1)
Valeur de retour = 8.

Saisir: N = 8, nombres = (5, 1, 2, 0, 0, 4, 3, 0)
Sortir: 11
Explication: Pour maximiser la valeur totale, effectuez l’opération suivante lors de l’itération de nums() :
nums(0) = 5, placé en haut de la file d’attente. La file d’attente devient : (5)
nums(1) = 1, ignorez ce nombre. File d’attente restante : (5)
nums(2) = 2, placé en haut de la file d’attente. La file d’attente devient : (2, 5)
nums(3) = 0, choisissez la valeur supérieure de la file d’attente et supprimez-la. Valeur totale = 0 + 2 = 2, et la file d’attente devient : (5)
nums(4) = 0, choisissez la valeur supérieure de la file d’attente et supprimez-la. Valeur totale = 2 + 5 = 7, et la file d’attente devient : ( )
nums(5) = 4, placé en haut de la file d’attente. La file d’attente devient : (4)
nums(6) = 3, ignorez ce nombre. File d’attente restante : (4)
nums(7) = 0, choisissez la valeur supérieure de la file d’attente et supprimez-la. Valeur totale = 7 + 4 = 11, et la file d’attente devient : ( )
Valeur de retour = 11.

Approche: Pour résoudre le problème, suivez l’idée ci-dessous :

Nous utiliserons une décroissante File d’attente de priorité et y stocker les entiers positifs, lorsque nous rencontrerons zéro, nous prendrons l’élément peek () (s’il n’est pas vide) de la file d’attente prioritaire et l’ajouterons à la variable val.

Voici les étapes de l’approche ci-dessus :

  • Initialiser une file d’attente à priorité décroissante.
  • Itérer le tableau donné,
    • Si vous rencontrez un entier positif, ajoutez-le à la file d’attente prioritaire.
    • Sinon, si vous rencontrez un zéro, vérifiez si la file d’attente prioritaire est vide ou non. S’il n’est pas vide, supprimez-en l’élément supérieur et ajoutez-le à la variable val qui contient la somme actuelle de la valeur maximale.
  • Renvoyez la réponse finale val.

Vous trouverez ci-dessous le code de l’approche ci-dessus :

Java

 

import java.util.*;

 

class GFG {

 

    

    public static void principal(String() args)

    {

        int N = 8;

        int() nums = { 5, 1, 2, 0, 0, 4, 3, 0 };

        System.out.println("Most worth is : "

                           + calculateMaxVal(nums, N));

    }

 

    

    public static int calculateMaxVal(int() nums, int N)

    {

        PriorityQueue<Integer> reducing

            = new PriorityQueue<Integer>(

                Collections.reverseOrder());

        int val = 0;

        for (int i = 0; i < N; i++) {

            if (nums(i) == 0) {

                if (!reducing.isEmpty())

                    val += reducing.take away();

            }

            else {

                reducing.add(nums(i));

            }

        }

 

        return val;

    }

}

Sortir

Most worth is : 11

Complexité temporelle : O(N * log(N))
Espace Auxiliaire : SUR)

Related Articles

LAISSER UN COMMENTAIRE

S'il vous plaît entrez votre commentaire!
S'il vous plaît entrez votre nom ici

Latest Articles