解题思路
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
};