2015-12-25 13 views
5

Qual è la differenza travalore medio di due interi

int x = (right + left)/2; 

e

int x = left + (right - left)/2; 

appena ho avuto eccezione limite di tempo in primo caso, ma ho accettato nel secondo caso quando si fa ricerca binaria

+2

beh nel primo caso è possibile avere overflow di interi se destra e sinistra sono troppo grandi, ecco perché è necessario utilizzare la seconda variante –

+0

Ok, grazie, ho capito ora. –

+0

@MadiSagimbekov è solo un consiglio, prova a correggere questi piccoli errori da solo, controllando i valori delle variabili ad ogni iterazione. – Daga

risposta

4

La somma delle variabili int

destra + a sinistra (fuori interi limite)

è troppo grande e supera il limite di interi stoccaggio è per questo che v'è stato un flusso sopra a causa della somma, ma quando si utilizza la versione differenza la seconda

sinistra + (destra - sinistra) (entro il limite di interi)

si adatta al calcolo ed è a favore della macchina.

2

Il limite int (limitato) è 2.147.483.647.

Il valore right+left non rientra nel limite int.
Ma il valore left + (right - left)/2 è inferiore a int associato, ecco perché la seconda espressione funziona correttamente.

se si aggiungono numeri così grandi, utilizzare long.