哈哈这是数学题,考虑到数组有序而且等数组中target数字可能有n个,二分查找过程当中,如果数组中出现等于target的数且该数的前一个数小于target,那说明我们要找那个target的下标就是我们要找的。如果找到的target数等于target,但是它前一个数等于target的也当作大于target来处理,就和普通的二分查找处理是一致的。 还要注意是否是空数组和找不到等于target数字的情况 下边是代码处理

    int lo, mid, hi;
    
    if (!numsLen)
        return -1;
    
    mid = numsLen / 2;
    lo = 0;
    hi = numsLen;
    while (mid > 0) {
        if ((nums[mid] == target) && (nums[mid - 1] < target)) {
            return mid;
        } else if (nums[mid] >= target) {
            hi = mid;
            mid = (lo + hi) / 2;
        } else {
            lo = mid;
            mid = (lo + hi) / 2;
        }
        if ((lo == hi) && (nums[mid] != target))
            return -1;
    }
    return (nums[mid] == target) ? mid : -1;