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:
[code]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;
}
}
[/code]
mas aparece “java.lang.ArrayIndexOutOfBoundsException: 11
at Exercicio2Prova.nroSubSequencias(Exercicio2Prova.java:11)”
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.
[code]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 );[/code]
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.