Contador de sub sequencias

2 respostas
M

alguem consegue resolver esse exercicio?

Implemente o metodo int nroSubSequencias(int[] v, int k) que dado um array de inteiros v, calcula (e retorna) o numero de subsequencias de tamanho k cujos elementos possuem os mesmos valores. Isto é, achar o numero de subsequencias tal que v[i] = v[i + 1] = .. = v[i + k -1].
Ex: Supondo que v = [4, 2, 15, 15, 15, 3, 7, 7, 7, 7, 2] e k = 3, o metodo deve retornar 3, pois o array dado contem tres subsequencias de tamanho 3, uma subsequencia com valores 15 (v[2] ... v[4]) e duas (sobrepostas) com valores 7 (v[6]... v[8] e v[7] ... v[9]).

eu fiz e ficou assim:

class Exercicio
{
 int nroSubSequencias(int [] v , int k )
  {
    
    int contador = 0;   
    
    for (int i = 0; i<v.length; i++)
    {
      if (v[i] == v[i+k-1])
      {
        contador++;
      }
    }
    return contador;
  }
}

mas aparece "java.lang.ArrayIndexOutOfBoundsException: 11
at Exercicio2Prova.nroSubSequencias(Exercicio2Prova.java:11)"

2 Respostas

davidbuzatto

Vc precisa percorrer o array duas vezes, com dois fors aninhados.
O externo percorre o array inteiro, enquando o interno percorre com base no índice do externo.
Ai vc iria contanto as ocorrencias iguais e quando bate com a quantidade desejada (k) vc quebra o for.
Caso haja diferença, quebra o for tbm.

int[] v = { 4, 2, 15, 15, 15, 3, 7, 7, 7, 7, 2 };
int k = 4;
int contadorOcorrencias = 0;
int contadorSequencias = 0;

for ( int i = 0; i < v.length; i++ ) {
    
    for ( int j = i; j < v.length; j++ ) {
        
        if ( v[i] == v[j] ) {
            contadorOcorrencias++;
            if ( contadorOcorrencias == k ) {
                contadorSequencias++;
                break;
            }
        } else {
            break;
        }
        
    }
    
    contadorOcorrencias = 0;
    
}

System.out.println( contadorSequencias );

Tente sempre fazer o exercício no papel, tentando entender o que deve ser feito. Ai fica mais fácil montar o algoritmo e então converter para um método.

[]´s

M

interessante!!
muito obrigada!!

Criado 22 de julho de 2010
Ultima resposta 23 de jul. de 2010
Respostas 2
Participantes 2