Lista de array e localização da subsequência mais longa com o mesmo número [fechado]

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

  •  23-12-2019
  •  | 
  •  

Pergunta

Fiquei me perguntando qual seria a melhor maneira de implementar isso.

Não consigo pensar em uma boa maneira de salvar quais informações precisam ser salvas como o índice e o número de valores e, finalmente

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




    }

}



}
Foi útil?

Solução

Você poderia usar um ArrayList 2d, declarado assim:

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

e então declare os 2 ArrayLists para serem adicionados a ele no final do processo:

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

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

Então

1) percorrer a lista verificando se o elemento é igual ao anterior.

Se for, continue até o final ou seja descoberto um elemento diferente, ponto em que armazene o número dos elementos iguais anteriores no ArrayList chamado 'comprimento' e o valor do elemento naquele chamado 'valor'.Tenha um int (chamado índice, digamos) que armazena o índice do elemento em comprimento contendo o comprimento da subsequência atual mais longa (que será igual ao índice do elemento que contém o valor do elemento do qual é composto (que tem foi armazenado em valor)).

Se não estiver, vá para o próximo elemento.

2) Repita o processo, atualizando o índice se necessário (ou seja,se uma subsequência mais longa for descoberta).

Para adicionar comprimento e valor ao resultado no final, basta fazer result.add(length); e result.add(value);

Se você quiser retornar um objeto que contenha todas as informações necessárias, você pode agrupar o int 'index' em um Integer e adicioná-lo ao final do ArrayList chamado 'length' ou até mesmo colocá-lo em um novo ArrayList e adicionar esse ArrayList resultar.

Observe que para recuperar um elemento no índice i no primeiro ArrayList (neste caso aquele chamado 'comprimento') depois de ter sido armazenado no resultado, você precisaria fazer

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

EDITAR:

Então a parte do loop for que eu tinha em mente seria 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top