Search Insert Position solution using TypeScript
Below is my TypeScript solution to the LeetCode "Search Insert Position" question using binary search.
Algorithm: Because the input is sorted, the solution uses a binary search in order to find the target value.
- It starts by creating two pointers, a left pointer at the beginning of the array and a right pointer at the end of the array.
- On each iteration, the mid-point is found between the left and right pointers, and is called a pivot.
- If the pivot is the target value, the solution has been found.
- If the pivot is greater than the target, the right pointer moves to the pivot value in order to eliminate the search space to the right.
- If the pivot is less than the target, the left pointer move to the pivot in order to eliminate the search space to the left.
- This iteration continues until a target value has been found.
Time Complexity: Because each iteration reduces the search space by half, the time complexity is O(log(n)).
Space Complexity: Because this approach uses a constant amount of space, the space complexity is O(1).
/**
* Search Insert Position
* Given a sorted array and a target value, return
* the index if the target is found. If not, return
* the index where it would be if it were inserted in order.
*
* Time Complexity: O(log(n))
* Space Complexity: O(1)
*
* searchInsert([1,3,5,6], 5) // 2
* searchInsert([1,3,5,6], 0) // 0
*/
function searchInsert(nums: number[], target: number): number {
let pivot;
let left = 0;
let right = nums.length - 1;
// complete a binary search
while (left <= right) {
// set pivot point half way between left and right
pivot = Math.floor((left + right) / 2);
// found target
if (nums[pivot] === target) {
return pivot;
}
// eliminate search space on the right
else if (nums[pivot] > target) {
right = pivot - 1
}
// eliminate search space on the left
else {
left = pivot + 1;
}
}
return left;
}