希望一个简短的问题,对初学者学生的演示进行故障排除引起了我的注意。
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) 有点令人困惑,但负数告诉了重要部分(未找到)。
如果数组包含多个具有指定值的元素,则不保证会找到哪一个。
也就是说,根据您使用的实现,您可能有 11 个,也可能有 10 个。
如果需要查找第一个,请从找到的元素开始向后搜索。