Skip to content

Instantly share code, notes, and snippets.

@char-1ee
Last active December 1, 2024 20:04
Show Gist options
  • Save char-1ee/184a4835fd96eee0e06ca021d5156f0f to your computer and use it in GitHub Desktop.
Save char-1ee/184a4835fd96eee0e06ca021d5156f0f to your computer and use it in GitHub Desktop.
Binary search cheatsheet

Binary Search Cheatsheet

1. Find an exact target in sorted array

int find(vector<int>& nums, int target) {
    int left = 0, right = nums.size();
    while (left < right) {
        int mid = left + (right - left) / 2;
        if (nums[mid] == target)
            return mid;
        else if (nums[mid] < target) 
            left = mid + 1;
        else // nums[mid] > target
            right = mid;
    }
    return -1;
}

2. Find first number not smaller than (>=) target

int find(vector<int>& nums, int target) {
    int left = 0, right = nums.size();
    while (left < right) {
        int mid = left + (right - left) / 2;

        if (nums[mid] < target) 
            left = mid + 1;
        else // nums[mid] > target
            right = mid;
    }
    return right;
}

Noted that no need to check nums[mid] == target. An alternative in C++ STL lower_bound:

std::vector<int>::iterator low;
low = std::lower_bound (v.begin(), v.end(), 20); 

Transformation: find last number smaller then target.

 return right - 1;

3. Find first number larger than (>) target

int find(vector<int>& nums, int target) {
    int left = 0, right = nums.size();
    while (left < right) {
        int mid = left + (right - left) / 2;
        
        if (nums[mid] <= target)
            left = mid + 1;
        else // nums[mid] > target
            right = mid;
    }
    return right;
}

Similarly, a transformation is to find last number not larger than (<=) target.

  return right - 1;

For this transformation, C++ STL upper_bound:

std::vector<int>::iterator low,up;
low= std::lower_bound (v.begin(), v.end(), 20); 
up = std::upper_bound (v.begin(), v.end(), 20);

Difference

bs

References

LeetCode Binary Search Summary

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment