Binary Search
Given an array of integers numstargettargetnumstarget-1
You must write an algorithm with O(log n)
Example 1
Output: 4
Explanation: 9 exists in nums and its index is 4
Example 2
Output: -1
Explanation: 2 does not exist in nums so return -1
Constraints:
1 <= nums.length <= 104-104 < nums[i], target< 104- All the integers in
are uniquenums is sorted in ascending ordernums
Contents
Solution 1 - Using binary search
In this approach, we will apply leftrightwhilemid = midmid
-
If the element at
index is the target, then return themid index.mid -
If the element at
index is greater than target, since the array is sorted in ascending order, this means that the target lies on left half of the array, so we will updatemid index toright .mid-1 -
If the element at
index is less than target, since the array is sorted in ascending order, this means that the target lies on right half of the array, so we will updatemid index toleft .mid+1
If that target-1
public class BinarySearch {
static int search(int[] nums, int target) {
int left = 0;
int right = nums.length -1;
while(left <= right) {
int mid = left + (right - left)/2; // to avoid integer overflow
if(nums[mid] == target) {
return mid;
} else if(nums[mid]>target) {
right = mid-1;
} else {
left = mid+1;
}
}
return -1;
}
public static void main(String[] args) {
System.out.println(search(new int[]{-1,0,3,5,9,12}, 9));
System.out.println(search(new int[]{-1,0,3,5,9,12}, 2));
}
}
Complexity Analysis:
Time complexity: Above code runs in O(log n) time where nnums
Space complexity: O(1).
Above implementations source code can be found at