关注
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;
}
请问一下第一题的二分是这种思路吗
查看原帖
点赞 评论
相关推荐
04-13 15:09
南京邮电大学 电子信息类 点赞 评论 收藏
转发
牛客热帖
正在热议
# 牛客帮帮团来啦!有问必答 #
731714次浏览 11740人参与
# 非技术岗是怎么找实习的 #
74799次浏览 1400人参与
# 海康威视求职进展汇总 #
91686次浏览 1094人参与
# 浅聊一下我实习的辛苦费 #
81669次浏览 763人参与
# 如何写一份好简历 #
263393次浏览 3966人参与
# 硬件人求职现状 #
185253次浏览 2709人参与
# 通信硬件人笔面经互助 #
112096次浏览 2263人参与
# 面试等了一周没回复,还有戏吗 #
40646次浏览 501人参与
# 机械制造面试记录 #
37666次浏览 505人参与
# 24届营销人拿到了几个offer #
4250次浏览 62人参与
# 铜五铁六真的存在吗? #
28369次浏览 298人参与
# 实习生应该准时下班吗 #
76925次浏览 571人参与
# 打工人的辛酸 #
8630次浏览 134人参与
# 运营人的第一份offer应该如何选 #
35348次浏览 643人参与
# 美的求职进展汇总 #
39050次浏览 419人参与
# 如何看待offer收割机的行为 #
224291次浏览 3256人参与
# 产品实习,你更倾向大公司or小公司 #
36520次浏览 560人参与
# 数据人offer决赛圈怎么选 #
44854次浏览 728人参与
# 实习与准备秋招该如何平衡 #
172151次浏览 3115人参与
# 通信硬件薪资爆料 #
201214次浏览 1825人参与