07/10/2010, 17:33
|
| | Fecha de Ingreso: octubre-2010 Ubicación: España
Mensajes: 13
Antigüedad: 14 años, 2 meses Puntos: 0 | |
Respuesta: URGENTE. Divide y vencerás Tengo un ArrayList de números ordenados --> "Conjunto"
Me piden, para un número "X", encontrar la posición "n" tal que:
Conjunto(n) <= X <= Conjunto(n+1)
Para simplificar el problema, resto "X" a cada uno de los elementos de "Conjunto" y lo guardo en "lista". Lo que tengo que buscar ahora en "lista", es la posición en la que se cambia de signo (de negativo a positivo), es decir:
la posicion "n" tal que:
Conjunto(n) <= 0 <= Conjunto(n+1)
Lo he planteado de la siguiente forma:
int posicion = 0; //por defecto, caso base
int inicio = 0;
int fin = lista.size()-1;
int mitad;
while(fin-inicio > 0);
{
mitad = (inicio+fin)/2 + 1;
float valor_mitad = (Float)lista.get(mitad);
if(valor_mitad == 0)
{
posicion = mitad;
break;
}
float valor_anterior = (Float)lista.get(mitad-1);
if (valor_mitad>0)
{
if (valor_anterior <= 0)
{
posicion = mitad-1;
break;
}
fin = mitad-1;
}
float valor_siguiente = (Float)lista.get(mitad+1);
if (valor_mitad<0)
{
if (valor_siguiente >= 0)
{
posicion = mitad;
break= 1;
}
inicio = mitad+1;
}
}
Sólo me aparece error de compilación en los break. |