关注
const biPart=(target,arr)=>{
let low=0,high=arr.length-1;
let count=0;
//找不到的情况下: 最后low与high相等时low总比high大1
//为什么这里不能用low<high? 因为low<high的话无法判断最后low/high的位置
//比如 1 2 4 6 6 7 找5最后low=3是一个比5大的数,找3最后low=2是一个比3小的数
//但是如果low<=high, 最后的low都是比要找的那个数大的,相当于low表示arr中比target大的数的个数!!!
while (low<=high){
let mid=Math.floor((low+high)/2);
if (arr[mid]>target){
high=mid-1;
}else if (arr[mid]<target){
low=mid+1;
}else {
//找得到的情况: 这里存在重复数字,重复时最后low=high就没有上面的考虑
low=mid; //最后用low返回
//mid>0的情况下,找到第一个target的位置
while (mid&&arr[--mid]===target){
low--;
}
break;
}
}
//low代表arr中小于target的数字的个数
//arr.length-low则表示arr中大于等于target数字的个数
return arr.length-low;
}
请问一下第一题的二分是这种思路吗
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 为了入行xx岗,我学了__ #
4936次浏览 95人参与
# 小厂实习有必要去吗 #
77923次浏览 368人参与
# 实习的你做了哪些离谱的工作 #
7627次浏览 109人参与
# Prompt分享 #
1675次浏览 53人参与
# 简历第一个项目做什么 #
6130次浏览 97人参与
# 你都见过什么样的草台班子? #
3602次浏览 41人参与
# 被说“做题家”,你的反应是_____? #
1271次浏览 48人参与
# 如果让你发明个APP,你会想做什么 #
1642次浏览 48人参与
# 听到哪句话代表面试稳了OR挂了? #
124650次浏览 559人参与
# 工作压力大,你会干什么? #
11337次浏览 271人参与
# 找实习记录 #
23272次浏览 406人参与
# 大家实习每天都在干啥 #
112288次浏览 606人参与
# 如果不上班,你会去做什么 #
5598次浏览 232人参与
# 邪修省钱套路 #
6450次浏览 218人参与
# AI让你的思考变深了还是变浅了? #
3833次浏览 110人参与
# 金三银四,你有感觉到吗 #
673427次浏览 6040人参与
# 分享一个让你热爱工作的瞬间 #
57156次浏览 482人参与
# 你想跟着什么样领导? #
45518次浏览 231人参与
# 我的求职精神状态 #
419442次浏览 3071人参与
# 通信硬件薪资爆料 #
1200519次浏览 7192人参与
查看1道真题和解析