Бинарный поиск на Java.md
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
513ea8e541
commit
63602c5647
@ -75,11 +75,11 @@ public class Binary {
|
||||
Если элемент не найден, то вернется `-1`.
|
||||
|
||||
> [!WARNING] m = l + (r - l) / 2;
|
||||
> Во многих примерах в интернете можно встретить запись `int m = (l + r) / 2;`, вместо `int mid = l + (r - l) / 2;`. И у меня в заметке тоже была такая запись, пока один из читателей не обратил на это внимание.
|
||||
> Во многих примерах в интернете можно встретить запись `int m = (l + r) / 2;`, вместо `int mid = l + (r - l) / 2;`.
|
||||
>
|
||||
> Но использование второго варианта является лучшей практикой, так как это помогает избежать переполнения, когда размер массива велик.
|
||||
>
|
||||
> Например, если `l = 2147483647` и `r = 2147483647`, сумма `l` и `r` будет равна 4294967294, что превышает максимальное значение, которое может удерживать `int`, вызывая переполнение.
|
||||
> Например, если `l = 2147483647` и `r = 2147483647`, сумма `l` и `r` будет равна 4294967294, что превышает максимальное значение, которое может хранить `int`, вызывая переполнение.
|
||||
>
|
||||
> С другой стороны, если вы используете `mid = l + (r - l) / 2;` это будет работать, как и ожидалось, потому что вычитание будет сделано первым, а результат будет равен нулю, поэтому деление будет равно нулю, а сложение вернет значение `l`.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user