二分查找

题目描述

题目地址:http://mtw.so/5AYhNP
题目要求:

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

解题思路

  1. 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
    二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;如果x<a[n/2],则只要在数组a的左半部分继续搜索x,如果x>a[n/2],则只要在数组a的右半部搜索x.
  2. math.floor:取数字的近似值
  3. 左右指针
  4. 如果nums[mid]小于target,则左指针+1,否则右指针-1

解题代码

function search( nums ,  target ) {
   let len = nums.length
    if(!len)return -1
    let [left , right] = [0 , len -1]
    while(left <= right){
        let mid = left + Math.floor((right - left) /2)
        let num = nums[mid]
        if(num === target) return mid
        else if(num > target) right = mid - 1
        else left = mid +1
    }
    return -1
}
module.exports = {
    search : search
};
posted @ 2022-08-03 21:36  fionna  阅读(35)  评论(1编辑  收藏  举报