Introduction
Given an array of integers nums
which is sorted in ascending order,
and an integer target, write a function to search target in nums
.
If target exists, then return its index. Otherwise, return -1.
You must write an algorithm with $O(\log n)$ runtime complexity.
|
|
|
|
Process
This is a normal binary search, splitting each search iteration by $\frac{1}{2}$, I created a new function with left
and right
variables to indicate the high and low pointers on the array.
Since the array is already sorted in ascending order, the larger numbers will always be to the right of the mid value.
The mid index value could be found using the floor division of left + right
:
|
|
though I realise that using a right shift would make it faster
|
|
After getting the midpoint, there will be 3 conditions left:
nums[mid] == target
nums[mid] < target
nums[mid] > target
For each of this conditions, I’ll update the pointers or return the mid value. this is all done in a while loop where left
needs to be $\le$right
and left
should not go past right
(Value Not Found).
At the end, I’ll return -1
if the value isn’t found.
Calling the function in the return statement of the outer function definition, I’ll pass 0
and len(nums) -1
into the binary search function.
This solution takes a Time Complexity of $O(\log n)$ and Space Complexity of $O(1)$ as it only requires the size of the array.
Solution
|
|
Afterthoughts
This is my first step into revising for my Data Structures and Algorithms. Binary search is one of the fastest searching algorithms, with $O(\log n)$ Time Complexity. Coupled with a fast Sorting algorithm, Users will be able to sort and search for values quickly and efficiently.