张贤德


私信TA

用户名:uq_89659970817

访问量:279

签 名:

等  级
排  名 3813
经  验 1837
参赛次数 1
文章发表 4
年  龄 0
在职情况 学生
学  校 齐鲁理工学院
专  业 计算机科学与技术

  自我简介:

TA的其他文章

解题思路:


    使用双向指针 left right 记录 左右范围

    如果left > right 查找结束

    设置 m = (left + right) >>> 1 ,m为中间索引  (可更改为 m = left + right / 2,   使用无符号右移 避免数据过大超出int范围)  

    判断target值与左右指针的关系 如果此时m位置  小于 target 缩小right 反之 增大left 并返回 判断条件

    直到left > right

注意事项:

    数组必须为有序递增

参考代码:

public static int[] binarySearch(int[] a, int target){
        //指针和初值
        int left = 1, right = a.length;
        while (1 < right - left){ //j - i范围内待查找的范围个数
            //在这里没有办法理解 >>>进位符的,可以使用:int middle = beginIndex + ((endIndex-beginIndex)/2);
            // >> 带符号右移
            int m = (left+right) >>> 1;
            //            int m = (i + j)/ 2;//获取中间索引
            if (target < a[m]){
                right = m;     //小于中间值
            } else {
                left = m;
            }
        }
        int tmp = a[0];
        for (int i = 0; i < left; i++) {
            a[i] = a[i+1];
        }
        a[left] = tmp;
        return a;
    }

QQ截图20231010222124.png


 

0.0分

1 人评分

  评论区

  • «
  • »