黑马程序员技术交流社区

标题: 折半查找方法返回值的疑问 [打印本页]

作者: 北风    时间: 2014-9-27 21:11
标题: 折半查找方法返回值的疑问
本帖最后由 北风 于 2014-9-27 22:19 编辑

    楼主开始看毕老师的视频了,可能是刚开始热情高涨的原因。今天一天看了50多段了已经。就在刚刚,看到了数组中的折半查找方法的讲解视频。
    在视频中,毕老师说了一个面试练习题:有一个有序的数组,将某元素插入到该数组中,要保证插入后的数组是有序的,问该插在数组的哪个位置?
    可能是听了一天的视频,大脑有点疲惫的原因。听懂了老毕讲的折半查找的方法,但是对于这个练习题中折半查找方法的延伸。。还是有点不太懂 。。为什么会返回min呢,我的疑问是因为在查找时有两个移动的下边界min和上边界max,能用max来作为要插入的数组位置返回吗?如果不能,想问,为什么?谢谢,希望大家解惑。
  1. public static int halfSearch_2(int [] arr, int key){
  2.                 int min = 0, max = arr.length-1, mid;
  3.                 while (min<=max) {
  4.                         mid = (max+min)>>1;  //位运算右移一位
  5.                         if(key>arr[mid])
  6.                                 min = mid + 1;
  7.                         else if(key<arr[mid])
  8.                                 max = mid -1 ;
  9.                         else
  10.                                 return mid;             //返回值       
  11.                 }
  12.                 return -1 ;   //帖子中的联系题的代码就是将该句代码改为了 return min;
  13.         }
复制代码

注:return -1 ; //帖子中的联系题的代码就是将该句代码改为了 return min;

作者: cs8630323    时间: 2014-9-27 21:53
不会问问题,连代码都没有
作者: 北风    时间: 2014-9-27 22:20
cs8630323 发表于 2014-9-27 21:53
不会问问题,连代码都没有

代码已贴,求解决:P
作者: CC_gogo    时间: 2014-9-27 22:52
我不知道这两个步奏,你有没有看懂,这个例子能够返回min值得原因,就是到最后min的值比max要大,所以只能返回min的值,反之,如果要是返回max的值,那最后的结果跟实际是相差的。

20140927223550.png (61.59 KB, 下载次数: 11)

20140927223550.png

QQ截图20140927224617.png (26.3 KB, 下载次数: 7)

QQ截图20140927224617.png

作者: 北风    时间: 2014-9-28 11:41
CC_gogo 发表于 2014-9-27 22:52
我不知道这两个步奏,你有没有看懂,这个例子能够返回min值得原因,就是到最后min的值比max要大,所以只能 ...

按着您说的,今天连续看了三遍视频。现在懂了。非常感谢。
作者: CC_gogo    时间: 2014-9-28 14:31
北风 发表于 2014-9-28 11:41
按着您说的,今天连续看了三遍视频。现在懂了。非常感谢。

嗯嗯,我也是看视频有时候反复看,才能看懂。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2