Lista de matrices y búsqueda de la subsecuencia más larga con el mismo número [cerrado]

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

  •  23-12-2019
  •  | 
  •  

Pregunta

Me preguntaba cuál sería la mejor manera de implementar esto.

No puedo pensar en una buena manera de guardar la información que necesita guardarse, como el índice y el número de valores y finalmente el número real que se repite

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++)
    { 




    }

}



}
¿Fue útil?

Solución

Podrías usar una ArrayList 2d, declarada así:

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

y luego declare las 2 listas de matrices que se agregarán al final del proceso:

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

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

Entonces

1) itere a través de la lista verificando si el elemento es el mismo que el anterior.

Si es así, continúe hasta el final o se descubra un elemento que difiera, momento en el que almacene el número de elementos iguales anteriores en la ArrayList llamada 'longitud' y el valor del elemento en el llamado 'valor'.Tenga un int (llamado índice, digamos) que almacene el índice del elemento en longitud que contenga la longitud de la subsecuencia actual más larga (que será el mismo que el índice del elemento que contiene el valor del elemento del que está compuesto (que se ha almacenado en valor)).

Si no es así, pase al siguiente elemento.

2) Repita el proceso, actualizando el índice si es necesario (p. ej.si se descubre una subsecuencia más larga).

Para agregar longitud y valor al resultado al final, simplemente haga result.add(length); y result.add(value);

Si desea devolver un objeto que contenga toda la información requerida, puede envolver el 'índice' int en un número entero y agregarlo al final de la ArrayList llamada 'length' o incluso ponerlo en una nueva ArrayList y agregar esa ArrayList al resultado.

Tenga en cuenta que para recuperar un elemento en el índice i en la primera ArrayList (en este caso, la llamada 'longitud') después de que se haya almacenado en el resultado, necesitaría hacer

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

EDITAR:

Entonces, la parte del bucle for que tenía en mente sería esta:

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;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top