【算法】 入门 力扣 704 二分查找
程序员文章站
2024-01-04 17:09:04
...
总归是要练习的 总归不能二分查找都不会吧 你看 一练 不会 写了 一天才写完 僵硬
擦
笨逼
~~~ <script>
// 算法入门
// 一直以来 前端接触的算法比较稍 终于才发现了 力扣 这个网站 感觉其实挺好的
// 力扣704 二分查找 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,
// 写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
// 作为一个前端小朋友一看 就是indexOf easy 网上看了下 确实indexOf的性能是比较差一点的
// 而二分查找本来就是提交性能 就是从每一个找 变为一般一半的找
// 先取 数据源中的nums中间位,比较target目标值 如果想等 只找一次就找见了 如果不相等 考虑target比数组源
// 中间位大,那么我们就重新定义中间位是中间位加一和末尾之间重新定义的中间位 不断缩小范围 直至找到某一位
// 等于目标数据源,反馈当前中间位就是当前值在数据源中的索引 如果找不到则返回 -1
//上代码
/**
* @params { Numbers[] } 数字组成的数组
* @params { number } 一个数字
* @return {number} 返回数字number在在Numbers[] 的索引 如果没有 返回 -1
*/
var search = function (numArray,targetNum) { // numArray -- 数字数组 targetNum -- 目标数字
let left = 0 ; //设置默认左边初试值位0 因为索引下表是从0开始
let right = numArray.length - 1 ; //默认默认右边值位数组长度 其实就是他最大的下标
debugger
while(left <= right){ //防止卡死
let middle = parseInt( (right + left) / 2 ) //中位数 开始这句话写错了 看了 好久 擦 中位数是啥东西
if(numArray[middle] == targetNum){ //相等就是找见了 直接return'出来
return middle
}else if(numArray[middle] < targetNum){ //这句话也写错过 擦 如果当前中位数 比目标值小 更新左边下表位middle +1
left = middle + 1
}else{
right = middle - 1 // 同理 右边更新为middle - 1 呵呵 也写错了
}
}
return -1
}
//测试 用例
let a = search ([-1,0,3,5,9,12], 9 )
console.log(a)
//平平无奇的小猪才 写了一个小时
</script>