Liste de tableaux et recherche de la sous-séquence la plus longue avec le même numéro [fermé]

StackOverflow https://stackoverflow.com//questions/22077983

  •  23-12-2019
  •  | 
  •  

Question

Je me demandais quelle serait la meilleure façon de mettre en œuvre cela.

Je ne peux pas penser à un bon moyen de sauvegarder les informations qui doivent être enregistrées comme l'index et le nombre de valeurs et enfin le nombre réel qui se répète

public class testing 
{

public static void main(String[] args) 
{
    ArrayList<Integer> numbers = new ArrayList<Integer>();
    Scanner in = new Scanner(System.in);
    Integer a =0;
    Integer value = 0;
    Integer num = 0;

    boolean loop = true;
    //getting the string information
    while(loop)

    {
        System.out.println("Enter a series of numbers, 0 to stop");
        Integer n = in.nextInt();
        if(n.equals(0))
        {
            break;
        }
        else
        { 
            numbers.add(n);         

        }



    }

    for (int i = 1; i < numbers.size(); i++)
    { 




    }

}



}
Était-ce utile?

La solution

Vous pouvez utiliser une ArrayList 2D, déclarée comme ceci :

ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();

puis déclarez les 2 ArrayLists à y ajouter à la fin du processus :

ArrayList<Integer> length = new ArrayList<Integer>();

ArrayList<Integer> value = new ArrayList<Integer>();

Alors

1) parcourir la liste en vérifiant si l’élément est le même que le précédent.

Si c'est le cas, continuez jusqu'à la fin ou si un élément différent est découvert, auquel cas stockez le nombre d'éléments égaux précédents dans la ArrayList appelée « longueur » et la valeur de l'élément dans celle appelée « valeur ».Avoir un int (appelé index disons) qui stocke l'index de l'élément en longueur contenant la longueur de la sous-séquence actuelle la plus longue (qui sera la même que l'index de l'élément contenant la valeur de l'élément qui le compose (qui a été stocké en valeur)).

Si ce n'est pas le cas, passez à l'élément suivant.

2) Répétez le processus, en mettant à jour l'index si nécessaire (c'est-à-diresi une sous-séquence plus longue est découverte).

Pour ajouter de la longueur et de la valeur au résultat final, faites simplement result.add(length); et result.add(value);

Si vous souhaitez renvoyer un objet contenant toutes les informations requises, vous pouvez envelopper l'int 'index' dans un Integer et l'ajouter à la fin de l'ArrayList appelé 'length' ou même le mettre dans une nouvelle ArrayList et ajouter cette ArrayList. résulter.

Notez que pour récupérer un élément à l'index i dans la première ArrayList (dans ce cas celle appelée 'length') après qu'il ait été stocké dans le résultat, vous devrez faire

result.get(0).get(i);

MODIFIER:

Donc, la partie de la boucle for que j'avais en tête serait la suivante :

boolean same = false;
int sequenceLength = 0;
Integer sequenceInteger = null; 

for (int i = 1; i < numbers.size(); i++)
        { 
            if(numbers.get(i).equals(numbers.get(i-1)))
                {
                      same = true;
                      sequenceLength++;
                }      
            else(if same == true)
                {
                      sequenceInteger = new Integer(sequenceLength);
                      //add sequenceInteger to length and numbers.get(i-1) to value 
                      same = false;
                      sequenceLength = 0;
                }
            // else do nothing since same is false, which means that the current
            // element is different from the previous and the previous is 
            // different the one before that, so there are no new values to store
        }
// end of list reached
(if same == true)
{
      sequenceInteger = new Integer(sequenceLength);
      //add sequenceInteger to length and numbers.get(i-1) to value 
      same = false;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top