leetcode 278 First Bad Version
2016-06-29 19:31
232 查看
You are a product manager and currently leading a team to develop a new product. Unfortunately, the latest version of your product fails the quality check. Since each version is developed based on the previous version, all the versions after a bad version are
also bad.
Suppose you have
You are given an API
bad. Implement a function to find the first bad version. You should minimize the number of calls to the API.
Credits:
Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.
Subscribe to see which companies asked this question
int BinarySearch(int array[], int n, int value) {
int left = 0;
int right = n - 1;
//如果上面这句是int right = n, 那么下面有两处需要修改,以保证一一对应
//1.循环的条件是while(left < right)
//2.循环内,当arr[middle] > value的时候, right = mid
while(left <= right) { //循环条件,适时而变
//求中间位置,使用移位的方法是为了防止溢出,同时也更高效
int middle = left+((right-left)>>1);
if(array[middle] > value) {
right = middle-1; //right赋值,适时而变
}else if(array[middle] < value) {
left = middle+1;
} else {
//数组中不相等的情况更多
return middle;
}
}
}
also bad.
Suppose you have
nversions
[1, 2, ..., n]and you want to find out the first bad one, which causes all the following ones to be bad.
You are given an API
bool isBadVersion(version)which will return whether
versionis
bad. Implement a function to find the first bad version. You should minimize the number of calls to the API.
Credits:
Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.
Subscribe to see which companies asked this question
// Forward declaration of isBadVersion API. bool isBadVersion(int version); class Solution { public: int firstBadVersion(int n) { int left = 1, right = n, mid = 0; while(left < right) { mid = left + (right-left)/2; if(isBadVersion(mid)) { right = mid; } else { left = mid + 1; } } return left; } };
int BinarySearch(int array[], int n, int value) {
int left = 0;
int right = n - 1;
//如果上面这句是int right = n, 那么下面有两处需要修改,以保证一一对应
//1.循环的条件是while(left < right)
//2.循环内,当arr[middle] > value的时候, right = mid
while(left <= right) { //循环条件,适时而变
//求中间位置,使用移位的方法是为了防止溢出,同时也更高效
int middle = left+((right-left)>>1);
if(array[middle] > value) {
right = middle-1; //right赋值,适时而变
}else if(array[middle] < value) {
left = middle+1;
} else {
//数组中不相等的情况更多
return middle;
}
}
}
相关文章推荐
- 基于bootsrtap的网页开发|慕课网案例
- leetcode 67. Add Binary
- CircleImageView自定义圆形控件的使用
- (二)asp.net WebUploader 分片上传
- inline学习笔记
- 【51CTO学院三周年】参加网络全程班第二期感受
- JAVA WEB开发之JSP
- PHP数组、日期、文件的简单使用
- CSS3滤镜-Filters
- Python3之random模块
- UITableView Cell 弹簧动画效果
- [九度OJ]1091棋盘游戏
- Oracle--PL/SQL学习笔记
- 最终还是没选择Android
- Ecos model
- Bitmap too large to be uploaded into a texture
- Hive UDF jar
- 裁剪图片的指定位置
- Oracle中DBMS_JOB.SUBMIT的用法说明
- 一个非常好用的自定义圆形控件