读书人

经典面试题小结 Binary Search 及

发布时间: 2012-09-14 23:00:49 作者: rapoo

经典面试题总结 —— Binary Search 及其变种

二分查找是在技术面试中经常出现的题目,首先这种题目考察思路,另外因为代码一般很短----不会超过50行。所以很适合做技术笔试,或者面试之类的题目出现。

之前做过一些题目,很多是BS算法的变种,我这里给出几个例子,算是做一个总结吧。


1. 传统的Binary Search

1.1. 最普通的BS算法就是给定一个排好序的数组,然后查找一个数是否在数组内,如果在给出下标,如果不在则返回-1.

bool SearchInRowColSortedMatrix(const int data[], int nRow, int nCol, int query, int &tRow, int &tCol){     int iRow, iCol;          iRow = 0;     iCol = nCol - 1;     int t;      while(iRow < nRow && iCol >= 0)     {         t = data[iRow * nCol + iCol];//get the current data.                   if( t == query) //find it         {             tRow = iRow;             tCol = iCol;             return true;         }         else if( t < query) // eleminate the rest of the elements in the current row, who are less than t.          {             iRow++;         }         else //eleminate all the rest elements in current col, who are greater than t.         {             iCol--;         }     }     return false;}

写在最后:

上面的代码可能有一些地方有bug, 虽然我做了一些测试,包括穷举所有内部元素的 正测试,还有不在查找数组中的反测试。 这些代码确实很容易出bug,对于一些大公司如MS等比较看重代码,要求bug-free的公司可能经常作为考题,来考察现场编程能力。 不过自己依然很水,还需要努力,努力写出bug-free的code

2楼CarzyStarry昨天 22:27
代码还缺少了非法输入的检测
Re: hopeztm昨天 22:56
恩是的,应该在最前面都是 加上这个特殊情况回复CarzyStarry
1楼liuweixuan昨天 14:14
好棒,不过目测空串的处理会有问题 :).
Re: hopeztm昨天 16:13
好像应该是 while 回复liuweixuan

读书人网 >编程

热点推荐