LeetCode278 二分查找
2016-02-01 19:42
344 查看
题目大意:有一个1-n的序列,其中中间从某一个数开始出现坏的状况,如果这个数坏了,后面所有的数都是坏的。判断一个数是否坏给定了API函数,让你设计一个算法,使得调用这个API isBadNumber()函数次数最少。
题解:首先拿在手里,最容易想到的就是二分查找。1-----------------n,low=1;high=n;mid=low+(high-low)/2;此时当n为偶数时,mid为中间靠左那个数,这样如果isBadNumber(mid)为真,表示这个数是坏的,那么就将mid=high;如果为假,那么表示这个数是好的,那么mid=low+1;最后return low;
代码如下:
题解:首先拿在手里,最容易想到的就是二分查找。1-----------------n,low=1;high=n;mid=low+(high-low)/2;此时当n为偶数时,mid为中间靠左那个数,这样如果isBadNumber(mid)为真,表示这个数是坏的,那么就将mid=high;如果为假,那么表示这个数是好的,那么mid=low+1;最后return low;
代码如下:
// Forward declaration of isBadVersion API. bool isBadVersion(int version); class Solution { public: int firstBadVersion(int n) { //二分查找 int low = 1, high = n, mid; if (n == 1) return 1; while (low<high){ mid = low + (high - low) / 2; if (isBadVersion(mid) == 0){ //如果是好的,low就往上提 low = mid + 1; } else if (isBadVersion(mid) == 1){ //如果是坏的,high就往下提 high = mid; } } return low; } };
相关文章推荐
- QThread 与 QObject的关系(QObject可以用于多线程,可以发送信号调用存在于其他线程的slot函数,但GUI类不可重入)
- HDU 1010 Tempter of the Bone(bfs)
- 关于C语言里getchar和scanf的思考
- tnsping 解析
- app兼容性测试
- PAT 1001. A+B Format (20)
- HDU 2717 Catch That Cow(bfs)
- postgresql关于auto vacuum
- 四个害人小程序解法
- Linux基本的快捷键
- javascript实现贪吃蛇
- 互联网产品上线前,做些什么——产品、开发、测试的视角
- xshell下bpython使用退格键的问题
- K度图的着色,uva1613
- MFC 实现浏览按钮选择文件
- 硬盘分区表知识——详解硬盘MBR
- HDU 1061 Rightmost Digit(找规律)
- vim命令常用
- 3236: [Ahoi2013]作业
- Linux线程 -- 互斥锁实践