最近做1个OJ题目,其中有一步这样的操作:给定一个排序好的数组,随意给定一个数据,寻找数组中第一个大于或等于该值的数据在数组中的索引。如{1,4,5,10}, 给定4,应该返回的索引是1;给定6应该返回的索引是3
刚开始我用的是直接从前到后扫描一遍这种最原始的方法,跑junit用例的时候,发现此处存在性能瓶颈。最后使用了jdk中自带的二分搜索,满足了性能要求。呵呵,二分查找确实很快。下面附上Arrays.binarySearch()的JDk源代码
/** * * @param a 已经排好序的数组 * @param fromIndex 搜索范围的起始位置(包含) * @param toIndex 搜索范围的结束位置(不包含) * @param key 需要查询的关键字 * @return * 如果key包含在数组中,则返回对应的数组索引; * 否则返回 (-(插入点) - 1). * * 插入点 被定义为将键插入数组的那一点:即第一个大于此键的元素索引,如果数组中的所有元素都小于指定的键,则为 a.length */ private static int binarySearch(int[] a, int fromIndex, int toIndex,int key) { int low = fromIndex; int high = toIndex - 1; while (low <= high) { //int mid = (low + high) / 2; //System.out.println((2+7) >>> 1);//4 //System.out.println((2+5) >>> 1);//3 int mid = (low + high) >>> 1; int midVal = a[mid]; if (midVal < key) { low = mid + 1; } else if (midVal > key) { high = mid - 1; } else { return mid; // key found } } return -(low + 1); // key not found. }
其实JDK的api提供了很多工具方法,学会之后,能够提高我们对java语言的熟悉程度和算法能力,毕竟JDK的算法,大部分性能还是很高的
相关推荐
在Java编程语言中,`Arrays`类是Java.util包下的一个非常重要的工具类,它提供了大量用于操作数组的静态方法,其中包括我们今天要讨论的`binarySearch()`方法。`Arrays.binarySearch()`方法允许我们在有序数组中查找...
例如,`Arrays.binarySearch(array1, 3)`会返回元素3在`array1`中的位置,如果元素不存在,返回负数。 5. **数组克隆**: - `clone()`方法可以创建数组的一个副本。在示例中,`array2 = array1.clone()`创建了`...
int index = Arrays.binarySearch(array, 3); System.out.println("元素 3 的索引:" + index); // 复制数组 int[] copiedArray = Arrays.copyOf(array, 3); System.out.println(Arrays.toString(copiedArray)...
`Arrays.binarySearch()`方法可以实现高效的二分查找。这种方法要求数组事先已经排序。该方法返回查找元素在数组中的索引位置,如果未找到则返回负数。 **示例代码**: ```java System.out.println(Arrays.binary...
Java中的binarySearch方法是Java.util.Arrays类提供的一个静态方法,用于在数组中搜索指定的元素。该方法有两个用法,分别是搜索整个数组和搜索指定范围内的元素。 binarySearch(Object[], Object key)方法 该方法...
* Arrays.binarySearch()方法可以在数组中查找元素,例如:Arrays.binarySearch(数组,元素); * Arrays.equals()方法可以比较两个数组是否相等,例如:Arrays.equals(数组1,数组2); 四、实验结果分析 * 实验...
那么使用Arrays.binarySearch(intArray, 3)将会返回索引2,因为数组中的第三个元素是3。 3. Arrays.sort(数组名) sort() 方法可以对数组进行排序,排序方式可以是升序或降序。例如,如果我们有一个int类型的数组...
在Java编程语言中,`binarySearch()`方法是`java.util.Arrays`类的一个静态方法,它采用二分查找算法来高效地在有序数组中查找指定的元素。二分查找是一种在有序数据集合中寻找目标值的算法,其效率远高于线性搜索。...
在这个例子中,`Arrays.binarySearch(array, 2)`返回了元素2在排序后的数组中的索引位置,结果是5,因为元素2在排序后的数组中位于第五个位置。 接着,我们学习如何向数组中添加元素。`insertElement()`方法接收...
在这个例子中,`Arrays.sort()`方法首先对数组进行排序,然后`Arrays.binarySearch()`会返回"cherry"在数组中的索引。如果未找到目标元素,`binarySearch()`会返回一个负数,该负数的绝对值是目标元素应插入的位置,...
int result = Arrays.binarySearch(arrays, 7); ``` 这个方法首先调用`binarySearch0`,内部实现包括两个步骤:确定查找范围并不断缩小查找区间,直到找到目标元素或确定不存在。如果找到目标元素,返回其索引;...
- **Arrays.binarySearch()方法**:这个方法提供了二分查找功能,可以在排序数组中查找指定元素,返回元素的索引或插入点。示例中查找85的位置: ```java int result = Arrays.binarySearch(arr1, 6, 9, 85); ``...
System.out.println(Arrays.binarySearch(arr, 5)); // 输出结果:2 System.out.println(Arrays.binarySearch(arr, 4)); // 输出结果:-3,表示没有找到该元素 ``` - **3. copyOfRange(int[] original, int from...
例如,`int position = Arrays.binarySearch(array, targetValue);` 查找目标值在数组中的位置。 #### 二、字符串的操作 字符串是字符序列的集合,Java中使用`String`类表示字符串。 1. **字符串的创建**: - ...
查找数组中的某个元素可以通过遍历数组实现,也可以使用`Arrays.binarySearch()`方法(需要先排序)。 ```java int[] nums = {1, 2, 3, 5, 25}; Arrays.sort(nums); int index = Arrays.binarySearch(nums, 5); ``` ...
`Arrays.binarySearch()`方法可以实现这一点,但这需要确保数组已排序,否则结果可能不正确。 6. **使用Objects.equals()** - 当处理对象数组时,推荐使用`Objects.equals()`代替`==`,以处理可能的`null`值。例如...
- `Arrays.binarySearch()`方法可用于已排序数组的二分查找,返回元素的索引。如果数组未排序,先调用`Arrays.sort()`。 6. **数组复制与拷贝**: - `System.arraycopy()`方法用于复制数组的一部分或全部到另一个...
int index = java.util.Arrays.binarySearch(datas, (byte) 5); System.out.println(index); ``` - **填充**: - `fill()` 方法用于将数组的所有元素设置为特定的值,常用于初始化或重置数组。 - 示例代码: ...