题目描述:
二分查找巧记诗
代码实现:
class Solution {
public int search(int[] nums, int target) {
// // 方式一:直接进行遍历
// for (int i = 0; i < nums.length; i++){
// if (nums[i] == target){
// return i;
// }
// }
// return -1;
// }
// 方式一:方式一的效率太过于低下,使用二分查找的思想会更好一点
int l = 0;
int r = nums.length - 1;
while (l <= r){
// 可能会出现溢出
// int mid = (l + r) / 2;
int mid = l + (r - l) / 2;
if (nums[mid] == target){
return mid;
}else if (nums[mid] < target){
l = mid + 1;
}else{
r = mid - 1;
}
}
return -1;
}
}
注意点:
- 计算 mid 时需要防止溢出,代码中l + (r - l) / 2就和(l + r) / 2的结果相同,但是有效防止了l和r太大直接相加导致溢出。
- while (l <= r)