完全二分查找

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 如果目标值存在返回下标,否则返回 -1
 * @param nums int整型一维数组 
 * @param target int整型 
 * @return int整型
 */
export function search(nums: number[], target: number): number {
    // write code here
    const len = nums.length
    if (len === 0){
        return -1
    }
  
    let left = 0
    let rigth = len - 1
    
    // 边界检查
    if (nums[left] > target && nums[rigth] < target){
        return -1
    }
    
    if (nums[left] === target){
        return 0
    }
    
    let mid = 0
    let targetIndex = -1
    while(left <= rigth){
         mid = rigth === 1 ? 1 : left + ((rigth - left) >> 1)
        if (nums[mid] === target){
            targetIndex = mid
        }else if(mid < targetIndex){
            break
        }
        if (nums[mid] >= target){
            rigth = mid - 1
        }else{
            left = mid + 1
        }
    }
    return targetIndex
}