半开区间二分:找第一个 nums[i] >= target

target = 33;搜索范围始终是 [left, right),循环条件是 left < right。
int search_insert(const int nums[], int n, int target) {
    int left = 0;
    int right = n;
    int ans = n;

    while (left < right) {
        int mid = left + (right - left) / 2;

        if (nums[mid] >= target) {
            ans = mid;
            right = mid;
        } else {
            left = mid + 1;
        }
    }

    return ans;
}