flssr 2024-10-30 22:24 采纳率: 100%
浏览 14
已结题

C++二分查找这样写为什么不对

这样写力扣测试超时,好像进入死循环了
思路是先判断左边界,在判断右边界
代码应该能看出来,但是不知道错在哪里

img

img

  • 写回答

1条回答 默认 最新

  • Cin.白术 2024-10-31 10:51
    关注

    在判断右边界时,如果left=3,right=4,nums[3]=5,nums[4]=6,target=5,则mid=3,总是满足nums[mid]==target,所以left=mid=3,和初始状态一致,所以会进入死循环。

    修改提示:
    1、可以在mid==left时进行特判(此时区间宽度为2,也可将while判断语句改为left<right-1,此时分别判断一下left和right即可找到边界)
    2、因为int型总是向下取整的特性,因此可使右缩进时 left==mid+1,这样能保证最终区间必然为1(left==right),但可能需要判断nums[left]==target来确定这是否是边界(如果不相等,则左边界是left+1(右边界是left-1))

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 11月8日
  • 已采纳回答 10月31日
  • 创建了问题 10月30日