二分查找
力扣链接:二分查找
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
方法1:暴力解法
即对数据进行遍历
方法2:二分查找
二分查找编写关键点
- 确认左右边界
- 确认中间值
- 比较之后,左右边界赋值变化
class Solution {
public int search(int[] nums, int target) {
int len = nums.length;
int l = 0;
int r = len -1;
while(l<=r){
int mid = l + (r-l)/2;
int midTemp = nums[mid];
if(midTemp == target){
return mid;
}else if(midTemp > target){
r = mid -1;
}else if(midTemp < target){
l = mid +1;
}
}
return -1;
}
}
错误历程
- 第一次编写代码时,while 条件写错了(l<r),这种错误会造成,数组为1时,返回-1,原因为当数组长度为1时,进不了循环。