【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
相关文章推荐
- [LintCode] 经典二分查找问题 - Java
- LintCode_Java旅程 经典二分查找问题(折半查找)
- lintcode-457-经典二分查找问题
- 【LintCode 简单】457. 经典二分查找问题
- Lintcode经典二分查找问题
- 经典二分查找问题-LintCode
- 【lintcode笔记】经典二分查找问题
- LintCode python 小白-简单题-457经典二分查找问题
- Lintcode 经典二分查找问题
- 457 - 经典二分查找问题
- 二分查找(Binary Search)需要注意的问题,以及在数据库内核中的实现
- 一个可能存在Bug的二分查找方法的实现,大家一起看看有什么问题没
- Java实现二分查找
- 算法:查找----二分查找(Java实现)
- java 实现二分查找法
- 二分查找需要注意的问题,以及在数据库内核中的实现
- java实现二分查找
- 折半查找(二分查找)Java实现
- 经典线程同步问题(生产者&消费者)--Java实现
- Java实现折半查找(二分查找)的递归和非递归算法