您的位置:首页 > 编程语言 > Java开发

【LintCode-457】经典二分查找问题(Java实现)

2017-11-05 13:42 651 查看


第一次代码记录:

public  int findPosition(int[] nums, int target) {
if(nums==null||nums.length==0){
return -1;
}
int start=0;
int end=nums.length-1;
while(true){
int mid=(start+end)/2;
if(nums[mid]==target){
return mid;
}else if (nums[mid]>target){
end=mid;
}else{
start=mid;
}
if(end-start<=1){
return -1;
}
}
}


LintCode测试BUG指出:

在LintCode提交测试,显示正常通过,但其实是不全对,因为如果出现target正好在 第一位或最后一位 时,代码输出为 -1,而正确结果应该为 0 或者nums.length-1;

第二次代码记录:

public  int findPosition(int[] nums, int target) {
if(nums==null||nums.length==0){
return -1;
}
int first=0;
int last=nums.length-1;
int half=0;
//新增判断
if(nums[first]==target){
return first;
}
if(nums[last]==target){
return last;
}
while(last-first>1){
half=(last+first)/2;
if(nums[half]==target){
return half;
}else if(nums[half]<target){
first=half;
}else {
last=half;
}
}
return -1;

}


个人解题思路:

通过在while循环里 重复对 half赋值判断(通过fisrt=half+1 或 last=half-1),如果找到满足条件nums[half]==target,返回half,直至循环结束返回-1.

如果您有更好的解法,欢迎您在留言区补充,感谢!!

b2e6
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: