https://leetcode.com/problems/binary-search | Easy |
---|
Дан массив целых чисел nums
, отсортированный по возрастанию, и целое число target
.
Вернуть индекс target
, если он существует в nums
. Иначе вернуть -1
.
Вы должны написать алгоритм со сложностью O(log n)
.
Input:
nums = [-1, 0, 3, 5, 9, 12], target = 9Output:
4Explanation:
9 находится в nums[4].
Input:
nums = [-1, 0, 3, 5, 9, 12], target = 2Output:
-1Explanation:
2 нет в массиве.
fun search(nums: IntArray, target: Int): Int {
var left = 0
var right = nums.size - 1
// Повторяем, пока есть элементы для проверки
while (left <= right) {
// Находим средний индекс, чтобы избежать переполнения
val mid = left + (right - left) / 2
// Если средний элемент равен цели, возвращаем его индекс
if (nums[mid] == target) return mid
// Если средний элемент меньше цели, сдвигаем левую границу
if (nums[mid] < target) {
left = mid + 1
} else {
// Если средний элемент больше цели, сдвигаем правую границу
right = mid - 1
}
}
// Если элемент не найден, возвращаем -1
return -1
}
O(log n)
, так как каждый шаг уменьшает размер массива вдвое.
O(1)
, так как используется только несколько дополнительных переменных.