描述

请实现无重复数字的升序数组的二分查找
给定一个 元素升序的、无重复数字的整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标(下标从 0 开始),否则返回 -1

复杂度要求:时间 O(logn)
空间 O(1)

方法1,递归

function search( nums ,  target ) {
  if(nums.length === 0) return -1
  function _search(start, end, target) {
    if(end === start) return nums[start] === target ? start : -1;
    let mid = Math.floor((end+start)/2);
    if(nums[mid] === target) return mid;
    if(nums[mid] < target) {
      return _search(mid + 1, end, target);
    }else {
      return _search(start, mid-1, target);
    }  

  }
  return _search(0, nums.length-1, target)
}

方法2(推荐)

function search( nums ,  target ) {
  let start = 0, end = nums.length -1, mid
  while(start <= end) {
    mid = ~~((end + start)/2)  //快速取整
    if(nums[mid] === target) return mid
    if(nums[mid] < target) {
      start = mid + 1
    } else {
      end = mid - 1
    }
  }
  return -1
}

console.log( search([-1,0,3,4,6,10,13,14], 10) )