逢试必考的二分查找(算法村第九关青铜挑战)

位运算

除法在计算机中效率很低,一般改用 >> x ,意思是二进制数的每个位右移 x 位。从十进制的角度看, x 是以 2 为底的指数,这个指数就是除数。

java 复制代码
//等价式
mid = (low + high) / 2;
mid = low + high >> 2;	//效率提高
mid = low + (high - low >> 2);	//防止(low + high)溢出

在 Java 中,位运算符 >> 的优先级低于加法运算符 +,所以需要使用括号来保证正确的优先级

用递归实现二分查找

java 复制代码
/**
 * @param arr 升序数组
 */
public static int binarySearch(int[] arr, int low, int high, int target)
{
    if(low > high)
        return -1;  //没有找到返回-1

    int mid = low + (high - low >> 1);

    if(arr[mid] == target)
        return mid; //返回目标值的位置

    else if(arr[mid] < target)
        return binarySearch(arr,mid + 1, high, target); //向右寻找

    else
        return binarySearch(arr, low, mid - 1, target); //向左寻找
}

有重复元素的二分查找

迭代实现

java 复制代码
public static int binarySearch(int[] arr, int target)
{
    int low = 0;
    int high = arr.length - 1;

    // 使用二分查找法查找target
    while (low <= high)
    {
        int mid = low + (high - low >> 1);

        // 如果中间元素等于target,则返回中间元素索引
        if (arr[mid] == target)
        {
            // 如果中间元素不是第一个元素,则继续向前查找
            while (mid != 0 && arr[mid] == target)
                mid--;

            // 如果中间元素是第一个元素,则返回0
            if (mid == 0)
                return 0;
            else
                return mid + 1;
        }
        // 如果中间元素小于target,则将low移动到mid+1
        else if (arr[mid] < target)
            low = mid + 1;
        // 如果中间元素大于target,则将high移动到mid-1
        else
            high = mid - 1;
    }

    // 如果查找结束没有找到target,则返回-1
    return -1;
}
相关推荐
Mr_Xuhhh1 小时前
算法题解博客:三道经典题目的思路与实现
算法
算法-大模型备案 多米1 小时前
大模型备案实操指南:材料、流程与避坑要点
大数据·网络·人工智能·算法·文心一言
顾温1 小时前
数据转换函数
开发语言·算法
汉克老师1 小时前
GESP2025年6月认证C++三级( 第三部分编程题(1、奇偶校验)
c++·算法·gesp三级·gesp3级·按位操作
Fcy6481 小时前
算法基础详解(一)模拟算法与高精度算法
算法·模拟算法·高精度算法
Promise微笑1 小时前
算法对齐还是实战突围?解构GEO优化中方法论与实践的权重博弈
算法
米粒11 小时前
力扣算法刷题 Day 29
算法·leetcode·职场和发展
wfbcg1 小时前
每日算法练习:LeetCode 125. 验证回文串 ✅
算法·leetcode·职场和发展
We་ct1 小时前
LeetCode 295. 数据流的中位数:双堆解法实战解析
开发语言·前端·数据结构·算法·leetcode·typescript·数据流
Aaron15882 小时前
RFSOC+VU13P/VU9P+GPU通用一体化硬件平台
人工智能·算法·fpga开发·硬件架构·硬件工程·信息与通信·基带工程