First Bad Version
2015-09-18 10:40
155 查看
很久没在OJ上刷题了,不知不觉现在都已经是研究生了。开学才半个月,就感觉研究生生活是这么的无聊,每天不是看论文就是上课(ps:偶尔还打打游戏……)在yyd的建议下,决定重拾刷题的乐趣。在此,也希望有志同道合的小伙伴能加入我这个刷题小分队,大家一起快乐学习,共同进步
废话少说,先来看看我2年后复出的第一道算法题吧^_^ (大牛看到这里就可以止步了……)
题意很简单,就是一个产品有n个版本,依次为1,2,3,……,n,如果某个版本有问题,那么后面所有的版本都会受到影响,现在要知道第一个出现问题的版本号(题目中提供了判断版本是否有问题的方法isBadVersion)
首先能想到的最简单的方法就是从版本号1开始遍历,找到第一个isBadVersion返回true的版本号就结束,但这种方法对于n很大的情况肯定会超时。
其实,熟悉二分法的看到这个题目的第一眼就知道是二分,因为本题刚好满足有序,且要查找中间某个特定的数。知道二分了,下面的代码就很简单了。但有一个地方需要注意,我在代码中已标注。
class Solution { public: int firstBadVersion(int n) { long low,mid,up; low=1;up=n; while(low<up) { //当n很大时,此处low+up可能溢出,所以将low,up,mid声明为长整型 mid=(low+up)>>1; if(isBadVersion(mid)) up=mid; else low=mid+1; } return low; } };
相关文章推荐
- 20-EMM Procedure 8&9. Handover & Cell Reselection with TAU
- puremvc 入门与思考
- centos安装locate
- IOS -- iOS 8 CoreLocation 中状态栏(StatusBar)的细节问题
- android system.prop使用(1)
- 谭浩强是脑残的精神领袖吗?
- puremvc 入门与思考
- linux下查看进程内存使用情况
- [LeetCode] ZigZag Conversion
- jquery实现隐藏在左侧的弹性弹出菜单效果
- ABBYY FlexiCapture 帮助韩国商人申请产品专利
- A、B站估值步步高攀,也走出两条不同的弹幕视频光明大道
- android 超简单的手写签名Demo
- 配置环境变量
- PureMVC QA:Where Should I Declare Notification Name Constants
- iOS经典讲解之异步加载图片类的封装
- PureMVC QA:Where Should I Declare Notification Name Constants
- Linux常用命令大全4-vi编辑文件命令
- JS三大经典变量命名法
- Java 8 中 Date与LocalDateTime、LocalDate、LocalTime互转