aloha…
Eu tenho que implementar um método que conta o número de elementos de um array ordenado que se encontram no intervalo [b,c]. Por exemplo, o array [1,2,4,6,7,9] e o intervalo [2,8], o método retorna 4 . Mas preciso de o algoritmo o mais eficiente possível.
Eu fiz o seguinte :
public static int countInterval(int[]a,int b,int c){
int i=a.length/2;
int j=i;
while(i>=0 && i<a.length){
if(a[i]==b || (a[i+1]>b && a[i-1]<b)) break;
else{
if(a[i]>b){i=i/2;continue;}
if(a[i]<b){i+=i/2;continue;}
}
}
while(j>=0 && j<a.length){
if(a[j]==c|| (a[j+1]>c && a[j-1]<c))break;
else{
if(a[j]>c){j=j/2; continue;}
if(a[j]<c){j+=j/2; continue;}
}
}
return j-i+1;
}
Utilizando duas pesquisas binárias, penso que seja o mais eficiente…
Haverá alguma maneira mais eficiente de fazer isto ???