BinarySearch边界处理

https://www.1point3acres.com/bbs/thread-432793-1-1.html

如果左闭右开 即l=0 r=len,那么r指针是取不到的 while只是小于号就还可以。当target大于中值,l=mid+1, 当target小于中值,r=mid. 当target等于中值,直接返回target即可.当一直都没有找到target.此时的l/r指针指向的是什么?(最接近target的最大值/最小值吗)
如果左闭右闭 即l=0 r=len-1,那么r指针是要取到的 while需要用小于等于号。当target大于中值,l=mid+1, 当target小于中值,r=mid-1。 (因为这是有明确的区间要求 只要是使用过的 一律绕过)

不遵守以上规则的话 会造成死循环等等状况 所以一定要想清楚了。

Binary Search的题目有三种类型:

  1. 有明确的target.
    比如说LC374 Guess number higher or lower,就相当于给定了从1~N的一个排序好的数组和一个target(心里想的数),每次guess一个合理区间里面的中值,根据回家higher or lower来进行调整上下界。
    LC367 valid perfect square, 及给定一个数字 判断是不是perfect square. 也就是说,给定一个数字 判断其是不是可以由一个整数相乘得到。我们每次找0~target的中间数 判断这个mid^2大于还是小于target, 大了就调上界 小了就升下界 然后重新找中点值。
    LC033 search in rotated array,就是把sorted的数组 在某一点打断 然后给出target让在指数时间内完成。(既然是指数 说明还是用二分法,因为只打断了一点 说明大多数sorted信息还是可以用的 不然就太浪费了)这个题目就是找中点 因为左边或者右边有一边是sirted的,需要判断一下,如果当前小区间是sorted,就二分 如果不是 就继续取中点。
posted @ 2020-12-12 00:55  EvanMeetTheWorld  阅读(55)  评论(0)    收藏  举报