二分法——while等号

来源:互联网 发布:运营淘宝店要学什么 编辑:程序博客网 时间:2024/06/12 13:53

今天在做剑指offer    二维数组中查找问题

想用二分查找。废话不多说。

           int target = in.nextInt();           int left = 0;           int right = aa.length - 1;           int mid = (left + right) / 2;

            while (aa[mid] != target && left < right) {                if (aa[mid] < target)                    left = mid + 1;                else if (aa[mid] > target)                    right = mid - 1;                else {                   return true;                } //            mid = left + (left + right) / 2;                mid = (left + right) / 2;            }            if (aa[mid] == target) {                return true;            } else {                return false;            }这个版本里面,while里面没有 = 。例如在 数组 1,3,5,7,8,9里面找3.那么在while循环退出时,left, right 都指向值3,left,right,mid都为索引 1。即需要在while外面判断left==right 的情况。第二种版本  代码量比较少 重要的地方就是while里面的判断条件需要改为left<=right如下
int target = in.nextInt();int left = 0;int right = aa.length - 1;int flag = 0;while ( left <= right) {    int mid = (left + right) / 2;    if (aa[mid] < target)        left = mid + 1;    else if (aa[mid] > target) {        right = mid - 1;    }    else{        return true;    }}


 



原创粉丝点击