/ / Java - Use binarySearch para encontrar # de ocorrências de determinado elemento na matriz, sem If - java, matrizes, pesquisa

Java - Use binarySearch para localizar # de ocorrências de determinado elemento na matriz, sem If - java, arrays, search

Eu estou tentando encontrar o número de ocorrências de um número inteiro em uma matriz int, mas sem usar as instruções if.

Entendo que, normalmente, é possível simplesmente iterar pela matriz usando for ou foreach e incrementar uma variável de contagem cada vez que um elemento corresponde aos critérios usando if.

Como sou incapaz, no entanto, estou considerandoclassificando a matriz e encontre a diferença entre o primeiro e o último índice de cada conjunto de elementos repetidos nela e tentando utilizar o binarySearch para obter os índices, assim:

int[] list = {9, 9, 7, 5, 9, 9, 3, 1, 1};
Arrays.sort(list);

// list is now {1, 1, 3, 5, 7, 9, 9, 9, 9} for binarySearch

/* Finding the difference between the indices of the first and last occurrences of
9, for example, could yield the number of occurrences. */

int firstIndex = Arrays.binarySearch(list, 0);
// int lastIndex = ??

No entanto, estou confuso sobre como poderia encontrar o índice da última ocorrência. AFAIK, binarySearch é a única maneira de recuperar o índice de uma chave específica em uma matriz. Alguém poderia me esclarecer?

Respostas:

2 para resposta № 1

O índice da última ocorrência é o índice da primeira ocorrência do próximo valor (ou seja, value+1) menos 1.

Certifique-se de lidar com os casos em que o próximo valor existe e onde não existe.

No entanto, suspeito que você não deve usar APIs de biblioteca aqui e que você deve percorrer a matriz contando as ocorrências de todos valores, em outra matriz e, em seguida, retorne o valor das ocorrências para o número que você está procurando. ifs necessário.


3 para resposta № 2

Que tal agora? Eu não acho que ele usa qualquer if afirmações.

long count = Arrays.stream(list).filter(x -> x == number).count();

1 para resposta № 3

Não sei ao certo quais são as regras. Isso é trapaça?

static int count(int number, int[] list) {
int count = 0;
for (int a : list)
switch(a == number ? 1 : 0) {
case 1: count++;
}
return count;
}