Mikasa~Ackerman 2023-10-12 22:39 采纳率: 75%
浏览 0
已结题

学习Java中数组查找中的二分查找法,为什么显示这样?

学习Java中数组查找中的二分查找法,为什么运行不了?

img


麻烦大家帮我看一下

  • 写回答

2条回答 默认 最新

  • bug菌¹ Java领域优质创作者 2023-10-12 22:48
    关注

    该回答引用ChatGPT,望对题主有所帮助/启发;若有帮助,还望采纳。


    从截图中看不出具体的问题,可能是代码有语法错误或者运行时出现异常。建议将代码复制到集成开发环境(IDE)中进行调试,或者在代码中添加一些日志输出来帮助定位问题。

    如下是运行正常的Java中数组查找中的二分查找法,仅供参考:

    在Java中,可以使用二分查找法来查找有序数组中的元素。二分查找法是一种分而治之的算法思想,可以在较快的时间内找到目标元素。

    实现二分查找法的关键是确定左右边界和中间元素。假设要查找的元素为target,数组为nums,左右边界分别为left和right,中间元素为mid,则过程如下:

    1. 初始化左右边界,left = 0, right = nums.length - 1。

    2. 循环查找,直到left大于right。

    3. 计算中间元素的位置,mid = (left + right) / 2。

    4. 如果中间元素等于target,返回mid。

    5. 如果中间元素小于target,说明目标元素在右半部分,将左边界右移一位,left = mid + 1。

    6. 如果中间元素大于target,说明目标元素在左半部分,将右边界左移一位,right = mid - 1。

    7. 如果循环结束仍未找到目标元素,返回-1。

    Java代码实现如下:

    public static int binarySearch(int[] nums, int target) {
        int left = 0, right = nums.length - 1;
        while (left <= right) {
            int mid = (left + right) / 2;
            if (nums[mid] == target) {
                return mid;
            } else if (nums[mid] < target) {
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }
        return -1;
    }
    

    需要注意的是,在Java中,有一种内置的二分查找方法。如果数组是已排序的,可以直接使用Arrays类中的binarySearch方法。代码实现如下:

    public static int binarySearch(int[] nums, int target) {
        return Arrays.binarySearch(nums, target);
    }
    

    其中Arrays.binarySearch方法返回的是目标元素在数组中的索引,如果数组中不存在目标元素,则返回的是(-(插入点) - 1),其中插入点是目标元素可以插入到数组中的位置。因此,需要根据返回值来判断是否找到了目标元素。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月20日
  • 已采纳回答 10月12日
  • 创建了问题 10月12日

悬赏问题

  • ¥15 delphi indy cookie 有效期
  • ¥15 labelme打不开怎么办
  • ¥35 按照图片上的两个任务要求,用keil5写出运行代码,并在proteus上仿真成功,🙏
  • ¥15 免费的电脑视频剪辑类软件如何盈利
  • ¥30 MPI读入tif文件并将文件路径分配给各进程时遇到问题
  • ¥15 pycharm中导入模块出错
  • ¥20 Ros2 moveit2 Windows环境配置,有偿,价格可商议。
  • ¥15 有关“完美的代价”问题的代码漏洞
  • ¥15 请帮我看一下这个简易化学配平器的逻辑有什么问题吗?
  • ¥15 暴力法无法解出,可能要使用dp和数学知识