int binarySearch(vector<int>& nums, int target) {
    int left = 0, right = nums.size() - 1;

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

    return -1;
}

Midpoint

Where left lands when the loop ends

Reversing the search direction

Condition that pushes right Where left ends up
nums[mid] < target first element >= target (lower bound)
nums[mid] <= target first element > target (upper bound)

Comparing characters in C++