binarySearch() 错误识别索引值

问题描述 投票:0回答:1

希望一个简短的问题,对初学者学生的演示进行故障排除引起了我的注意。

        int[] nums = {2, 2, 4, 5, 8, 6, 2, 3, 5, 5, 5, 9, 0, 9, 6};
        Arrays.sort(nums);
        System.out.println(Arrays.toString(nums));  //prints sorted array
        System.out.println(Arrays.binarySearch(nums, 6));

//排序后的数组为:[0, 2, 2, 2, 3, 4, 5, 5, 5, 5, 6, 6, 8, 9, 9]

代码位于通用 main 方法中。它返回 11 而不是 10,即值 6 的第一个实例。如果我去掉其中一个 6,它会正确识别为 10。为什么?

谢谢你。

简而言之,教科书指出,如果找不到该值,它将返回-1。相反,它返回 (-(插入点) - 1) 有点令人困惑,但负数告诉了重要部分(未找到)。

java binary-search
1个回答
0
投票

来自 Javadoc

如果数组包含多个具有指定值的元素,则不保证会找到哪一个。

也就是说,根据您使用的实现,您可能有 11 个,也可能有 10 个。

如果需要查找第一个,请从找到的元素开始向后搜索。

© www.soinside.com 2019 - 2024. All rights reserved.