Binary
经典实现
function binaryFind(target, nums) {
let start = 0
let end = nums.length - 1
while(start <= end) {
const mid = Math.ceil((start + end) / 2)
if(nums[mid] == target) {
return mid
} else if(nums[mid] > target) {
end = mid - 1
} else {
start = mid + 1
}
}
return -1
}
注意的点
//下面两种都可以
const mid = Math.ceil((start + end) / 2)
const mid = Math.floor((start + end) / 2)
//!!!一定要带上等于号
start <= end
//记得+1或者-1
start = mid + 1
end = mid - 1
//记得返回-1
return -1
计算排序数组的中间值
不管 arr 的长度是奇数还是偶数,都可以使用这个公式来计算中间值。举个例子:
function average(arr: number[]) {
const m = arr.length
return (arr[Math.floor(m / 2)] + arr[Math.floor((m - 1) / 2)]) / 2
}
console.log(average([1, 2, 3, 4])) //=> 2.5
console.log(average([1, 2, 3])) //=> 2