二分法之左边界与右边界

本文详细介绍了二分法在查找数组中目标数索引的应用,包括二分法的基本原理和左右边界的判断。通过分析循环退出条件和区间调整,阐述了如何确定左边界和右边界,并给出了相应的代码示例,强调了避免边界错误的重要性。
摘要由CSDN通过智能技术生成

二分法

在刷力扣的数组专题过程中,二分法是一个十分重要的一个算法。

二分法的原理:
在有序数组中不断查询区间中间位置的元素与目标数比较,若查询元素小于目标数,则缩窄右区间,查询元素大于目标数,缩窄左区间,直到查询到目标数为止。

作为最基本查找目标数索引的二分法代码如下;

public int find(int[] nums,int target){
   
		int left = 0;
        int right = nums.length - 1;
        while(left <= right){
          //左闭右闭区间
        int mid = left + (right - left) / 2 ;
        if(nums[mid] == target){
   
                    return nums[mid]; 
        }else if(nums[mid] < target){
   
                    left = mid + 
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
二分法查找是一种高效搜索算法,它通过将有序数组分成两半来进行查找操作。以下是基本步骤: 1. **初始化**:首先确定整个数组的范围,通常初始时左右指针分别指向数组的第一个元素(边界)和最后一个元素(边界)。 2. **找到中间点**:计算数组的中间索引 `mid`,可以通过 `(left + right) / 2` 来计算。为了防止整数溢出,在实际编码时推荐使用 `left + (right - left) / 2` 或者 `left + ((right - left) >> 1)` 这样的写法。 3. **比较目标值与中间值**: - 如果中间值等于目标值,则找到了目标位置并返回结果。 - 如果中间值小于目标值,则更新边界为 `mid + 1` ,因为目标值存在于半部分。 - 如果中间值大于目标值,则更新边界为 `mid - 1` ,因为目标值存在于半部分。 4. **循环条件**:只要边界小于或等于边界,就继续执行上述步骤;如果边界超过了边界,则说明查找失败,并返回未找到的结果(通常是 `-1`、`false` 等标志值表示未找到)。 下面是一个简单的 C++ 实现示例: ```cpp #include <iostream> using namespace std; int binarySearch(int arr[], int l, int r, int x) { while (l <= r) { int m = l + (r - l) / 2; // Check if x is present at mid if (arr[m] == x) return m; // If x greater, ignore left half if (arr[m] < x) l = m + 1; // If x is smaller, ignore right half else r = m - 1; } // If we reach here, then element was not present return -1; } int main() { int arr[] = {2, 3, 4, 10, 40}; int n = sizeof(arr)/sizeof(arr); int x = 10; int result = binarySearch(arr, 0, n-1, x); (result == -1) ? cout << "Element is not present in array" : cout << "Element is present at index " << result; return 0; } ``` 这个例子展示了如何在数组中查找特定元素的过程,实现了从数组两端缩小查找范围直至找到元素或确认不存在的过程。理解并掌握二分查找的基本原理对于优化算法效率非常关键。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值