二分查找
学习地址
https://www.programmercarl.com/
针对一组有序且不重复的序列的查找
注意:
mid = (left + right)/2容易溢出
可以用:mid =(right - left)/2 + left
二分查找步骤
针对增序列
1.设置left = 0 ,right = nums.length - 1
2.比较taget和nums[mid]的值
- 如果target > nums[mid],说明taget在序列的右边,设置left = mid+1,重新计算mid
- 如果target < nums[mid],说明target在序列的左边,设置right = mid -1,重新计算mid
- 如果target == nums[mid],查找到target ,返回mid
题目:704 二分查找
https://leetcode.cn/problems/binary-search/
以示例一为例:
1.初始化left,right,mid
2.target=9>nums[mid],更新left=mid+1
3.更新mid=4
4.target ==nums[mid],返回mid
class Solution {
public int search(int[] nums, int target) {
int left = 0;
int right = nums.length - 1;
//如果target不在该数组当中
if(target < nums[left] || target > nums[right])
return -1;
while(left <= right){
int mid = left + ((right - left)>>1);
if(nums[mid] < target)
left = mid + 1;
else if(nums[mid] > target)
right = mid - 1;
else if(nums[mid] == target)
return mid;
}
return -1;
}
}