二分查找
学习地址
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;
}
}
本文介绍了二分查找算法的原理和步骤,特别指出在计算中间值时避免整数溢出的方法。通过示例解释了如何在有序且不重复的序列中应用二分查找,并提供了具体的代码实现,以LeetCode的704题为例进行演示。当目标值不在数组范围内时,返回-1。
689

被折叠的 条评论
为什么被折叠?



