声明:参考资料源自代码随想录。代码随想录
一、二分查找
1、题目:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
1)思路:有序、升序且无重复元素的数组符合二分法查找;重点在于区间的划分,选择左闭右闭区间。
2)代码
class Solution {
public int search(int [] nums, int target){
// 避免多次循环运算
if (target < nums[0] || target > nums[nums.length - 1]){
return -1;
}
int left = 0;
int right = nums.length - 1;
while(left <= right){
int middle = left + ((right - left) >> 1);
if (target == nums[middle]){
return middle;
}
if (target < nums[middle]){
right = middle - 1;
}
if (target > nums[middle]){
left = middle + 1;
}
}
return -1;
}
}