Skip to main content

Binary Search

LeetCode 792 | Difficulty: Easy​

Easy

Problem Description​

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.

Example 1:

Input: nums = [-1,0,3,5,9,12], target = 9
Output: 4
Explanation: 9 exists in nums and its index is 4

Example 2:

Input: nums = [-1,0,3,5,9,12], target = 2
Output: -1
Explanation: 2 does not exist in nums so return -1

Constraints:

- `1 <= nums.length <= 10^4`

- `-10^4 < nums[i], target < 10^4`

- All the integers in `nums` are **unique**.

- `nums` is sorted in ascending order.

Topics: Array, Binary Search


Approach​

Binary Search​

Binary search reduces the search space by half at each step. The key insight is identifying the monotonic property β€” what condition lets you decide to go left or right?

When to use

Sorted array, or searching for a value in a monotonic function/space.


Solutions​

Solution 1: C# (Best: 154 ms)​

MetricValue
Runtime154 ms
Memory40.2 MB
Date2021-11-25
Solution
public class Solution {
public int Search(int[] nums, int target) {
int lo = 0, hi = nums.Length - 1;
while(lo <= hi)
{
int mid = lo + (hi-lo)/2;
if(nums[mid] == target)
{
return mid;
}
else if(target > nums[mid])
{
lo = mid+1;
}
else
{
hi = mid-1;
}
}

return -1;
}

}

Complexity Analysis​

ApproachTimeSpace
Binary Search$O(log n)$$O(1)$

Interview Tips​

Key Points
  • Start by clarifying edge cases: empty input, single element, all duplicates.
  • Precisely define what the left and right boundaries represent, and the loop invariant.