08 Binary Search必知必会的二分查找

73 阅读1分钟

leetcode.cn/problems/bi…

解题思路

1.确定在那一部分取中值,即通过左右边界确定 let left = 0; let right = nums.length - 1,那么中值的计算规则就是 let mid = parseInt((right + left) / 2)

2.考虑中值小于target的情况,由于数组是从小到大配列的,那么说明 left -> mid 区域的值是不符合的,需要重新计算左边界left = mid + 1,大于的情况于此相反需要重新计算右边界 right = mid - 1

3.扫描完全部的区域的条件就很好说明了即 right >= left,

代码

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var search = function(nums, target) {
    let left = 0
    let right = nums.length - 1
    while(right >= left) {
        let mid = parseInt((right + left) / 2) 
        let val = nums[mid]
        if(val === target) {
            return mid
        } else if(val < target) {
            left = mid + 1
        } else {
            right = mid - 1
        }
    }
    return -1
};