package array.iterative;
public class BinarySearch {
public int search(int[] nums, int target) {
int leftPtr = 0;
int rightPtr = nums.length - 1;
while (leftPtr <= rightPtr) {
int midPtr = leftPtr + (rightPtr - leftPtr) / 2;
if (nums[midPtr] == target)
return midPtr;
if (nums[midPtr] < target) leftPtr = midPtr + 1;
else rightPtr = midPtr - 1;
}
return -1;
}
}
package com.eureka
package array.recursive
import scala.annotation.tailrec
object BinarySearch:
def search(nums: Array[Int], target: Int): Int =
@tailrec def loop(start: Int, end: Int): Int =
val mid = start + (end - start) / 2
if start > end then -1
else if nums(mid) == target then mid
else if nums(mid) < target then loop(mid + 1, end)
else loop(start, mid - 1)
loop(0, nums.length - 1)
from bisect import bisect_left
from typing import List
class BinarySearch:
def search(self, nums: List[int], target: int) -> int:
idx = bisect_left(nums, target)
return idx if idx < len(nums) and nums[idx] == target else -1